【问题标题】:Using Unicode regular expressions in Java to match any Unicode character在 Java 中使用 Unicode 正则表达式匹配任何 Unicode 字符
【发布时间】:2013-12-18 02:57:23
【问题描述】:

我正在尝试使用 Java 正则表达式匹配器进行搜索和替换。但是,在它无法匹配某个字符串后,我注意到表达式“.*”似乎无法匹配某些 Unicode 字符(在我的情况下,它是一个 \u2028 LINE SEPARATOR 字符)。

这就是我目前所拥有的(将 XML 元素与中间的任何文本匹配):

String segSourceSearch = "<source(.?)>(.*?)</source>";
String segSourceReplace = "<source$1>$2</source><target$1>$2</target>";
myString = myString.replaceAll(segSourceSearch, segSourceReplace);

基本上,这应该做的是复制元素。 但是如何修改正则表达式(.*?) 以匹配&lt;source&gt;&lt;/source&gt; 之间的任何Unicode 字符? Java中有内置模式吗?如果没有,ICU4J 中有什么可以使用的吗? (我无法在 ICU4J 中找到正则表达式匹配器)。

【问题讨论】:

标签: java regex unicode


【解决方案1】:

Pattern.DOTALL:

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

Dotall 模式也可以通过嵌入的标志表达式 (?s) 启用。

所以你正在寻找的模式是(?s).*?,为了捕获你仍然必须将它括在大括号中,((?s).*?),但你也可以将(?s)放在整个表达式的开头以启用@整个正则表达式的 987654325@ 模式。

【讨论】:

  • 非常感谢您的回复。 @艾伦,你是对的。那确实是一个错字。
  • 非常感谢您的解决方案。与此同时,我走了另一条路。我想要处理的文本是 XML 格式的,因此使用 XML 函数更容易进行转换。不管怎么说,还是要谢谢你。未来我会牢记 Dotall 模式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
  • 2014-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多