Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
任何符号的Java正则表达式?_Java_Regex_Unicode_Character Properties - Fatal编程技术网

任何符号的Java正则表达式?

任何符号的Java正则表达式?,java,regex,unicode,character-properties,Java,Regex,Unicode,Character Properties,有接受任何符号的正则表达式吗 编辑:澄清我在寻找什么。。我想构建一个正则表达式,它可以接受任意数量的空格,并且必须包含至少1个符号(例如,“$”等)或(非独占或)至少1个字符。是。点()将匹配任何符号,至少如果您将其与标志一起使用(否则它将不匹配新行字符).从文件中: 在dotall模式下,表达式.匹配任何字符,包括行终止符。默认情况下,此表达式不匹配行终止符 关于您的编辑: 我想构建一个正则表达式,该正则表达式可以接受任意数量的空格,并且必须包含至少1个符号(例如,“$”等)或(非独占或)至

有接受任何符号的正则表达式吗

编辑:澄清我在寻找什么。。我想构建一个正则表达式,它可以接受任意数量的空格,并且必须包含至少1个符号(例如,“$”等)或(非独占或)至少1个字符。

是。点(
)将匹配任何符号,至少如果您将其与标志一起使用(否则它将不匹配新行字符).从文件中:

在dotall模式下,表达式.匹配任何字符,包括行终止符。默认情况下,此表达式不匹配行终止符


关于您的编辑:

我想构建一个正则表达式,该正则表达式可以接受任意数量的空格,并且必须包含至少1个符号(例如,“$”等)或(非独占或)至少1个字符。

这里有一个建议:

\s*\S+
  • \s*
    任意数量的空白字符
  • \S+
    一个或多个(“至少一个”)非空白字符

在Java中,符号是
\pS
,与标点符号不同,标点符号是
\pP

我讨论了这个问题,并列举了所有ASCII标点符号和符号的类型

[\p{Alnum}\s]
这样的模式只适用于20世纪60年代的遗留数据集。要使用Java本机字符集,您需要

identifier_charclass = "[\\pL\\pM\\p{Nd}\\p{Nl}\\p{Pc}[\\p{InEnclosedAlphanumerics}&&\\p{So}]]";
whitespace_charclass = "[\\u000A\\u000B\\u000C\\u000D\\u0020\\u0085\\u00A0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]";

ident_or_white = "[" + identifier_charclass + whitespace_charclass + "]";
很抱歉,Java使使用现代数据集变得如此困难,但至少这是可能的


只是不要问边界或图形集。为此,请参阅。

对,因此,接受包含任意数量空格、至少1个单词和任意数量符号的字符串的正则表达式将是<代码>\\s*\\p{Alnum}[\\p{Alnum}\\s]*。。。点到哪里去了?严格来说,LF和CR是控制代码而不是符号,但你仍然正确,
不会匹配所有可能的字符值。我们不是把“符号”和“字符”混淆了吗?我将问题中的“symbol”解释为“非字母数字字符”。我想您可以将
[\\p{Alnum}\\s]*
改为
*
。一般来说,当您寻求正则表达式方面的帮助时,如果您提供一些应该匹配的字符串示例,会有很大帮助,还有一些不应该匹配的字符串示例。请定义“Symbol”-它是包含空格的字符吗?或者除了空格以外的任何东西…@Ulkmum:请看我的答案:您包括了Java有问题的东西,因为它们位于其本机字符集中,而不是传统字符集中。如果您必须处理这些问题:
!"#$%&'()*+,-./:;?@[\]^_ˋ{|}~¡¢£¤¥¦§¨©«¬®¯°±´¶·¸»¿×÷˂˃˄˅˘˙˚˜˝϶҂՚׀׃׆׳״‐‑‒–—―‖‗‘’‚‛“”“那么你必须使用我更喜欢的公式。嗯,如果我错了,请纠正我,但是所有这些字符都包含在
\S
类中,不是吗?@Ulkmun:恐怕选择的答案是错的。我可以很容易地让它在简单的数据上失败。”(@aioobe:Java中-但不是Perl中-模式
^\s*\s+$
针对
“\t\n”成功“
。我发现这是违反直觉的错误:显然它应该失败,而不是成功。除了邪恶帝国贿赂的语言律师的偶然行为,任何人都不会相信。这简直是胡说八道!”像
[\p{Alnum}\s]
这样的模式只适用于20世纪60年代的遗留数据集”--嗯,不,我也看到他们在做一些更新的东西…@aioobe:不,你没有:
[\p{Alnum}\s]+$
甚至在一些简单的事情上都失败了,比如
.20英镑
“这个和那个”
,以及
“莫里哀展览”
。欢迎来到Java!我们玩得开心吗?嗯,
\p{Alnum}
被清楚地记录为匹配
[a-zA-Z0-9]
,因此我不会说该行为有缺陷。见鬼,如果它匹配
),我会感到惊讶。很好:添加
\p{Punct}
那么。尽管Java的诱饵和开关都是不真实的Unicode,但它却被困在了20世纪60年代的计算黑暗时代。他们从根本上误解了
\b
\w
是并且必须不可避免地联系在一起的。通过切断这种联系,他们在语言中创造了一个混乱、混乱和恒定的第22条军规禁止任何试图使用它们的人。你有3个选择:[1]不要使用Java正则表达式[2]按照我在这里和其他人提出的指导方针,手工辛苦地重写所有Java正则表达式[3]现在使用我的alpha重写代码,测试版和以后的生产版。