在Java中使用Unicode正则表达式来匹配任何Unicode字符

时间:2013-12-02 11:52:35

标签: java regex unicode

我正在尝试使用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);

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

1 个答案:

答案 0 :(得分:1)

Pattern.DOTALL

  

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

     

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

因此,您要查找的模式为(?s).*?,为了捕获您仍需将其括在大括号((?s).*?)中,但您也可以将(?s)放在大括号的开头。整个表达式为整个正则表达式启用DOTALL模式。