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

时间:2010-12-03 12:48:02

标签: java regex unicode character-properties

是否有接受任何符号的正则表达式?

编辑:澄清我正在寻找的东西..我想构建一个正则表达式,它将接受任意数量的空格,并且必须包含至少1个符号(例如,“。$'等等)或(不是独家或)至少1个字符。

2 个答案:

答案 0 :(得分:7)

是。点(.)将匹配任何符号,至少如果您将其与Pattern.DOTALL标志一起使用(否则它将不匹配换行符)。来自文档:

  

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


关于你的编辑:

  

我想要构建一个正则表达式,它将接受任意数量的空格,并且必须包含至少1个符号(例如,“。$£等”)或(不是排他性的)至少1个字符。< /强>

这是一个建议:

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

答案 1 :(得分:0)

在Java中,符号为\pS,与标点字符\pP不同。

我讨论了这个问题,并列举了所有ASCII标点符号符号here in this answer的类型。

[\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使得使用现代数据集变得如此困难,但至少它是可能的。

不要问边界或字形集群。为此,请参阅my others posting