我正在尝试使用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中找到正则表达式匹配器)。
答案 0 :(得分:1)
启用dotall模式。 在dotall模式中,表达式。匹配任何字符,包括行终止符。默认情况下,此表达式与行终止符不匹配。
也可以通过嵌入式标志表达式(?s)启用Dotall模式。
因此,您要查找的模式为(?s).*?
,为了捕获您仍需将其括在大括号((?s).*?)
中,但您也可以将(?s)
放在大括号的开头。整个表达式为整个正则表达式启用DOTALL
模式。