正则表达式不匹配精美打印的文件

时间:2015-11-30 09:27:15

标签: java regex

我刚开始使用正则表达式,所以我可能会在这里做一些愚蠢的错误。我有以下正则表达式:

String regex = "length ?= ?\"[\\+-]?\\d+(\\.\\d+)?\".*height ?= ?\"[\\+-]\\d+(\\.\\d+)?\"";

这是正确匹配此文件/字符串:

<house length="120" prize="2000000" height="28"/>

匹配

<house prize="2000000"
       length="-1200"
       owner="Smith"
       height="55.8"/>

我觉得这很奇怪,因为它也应该匹配第二个......任何帮助我指向正确方向的人都会非常感激!

3 个答案:

答案 0 :(得分:1)

您需要在模式中使用字符类(例如[\s\n])来考虑换行符和空格,或者使用Pattern.MULTILINE (?m)或{{1} } Pattern.DOTALL

答案 1 :(得分:1)

这似乎有效:

String regex="(.|\\s)* length ?= ?\"[\\+-]?\\d+(\\.\\d+)?\"(.|\\s)*height ?= ?\"[\\+-]?\\d+(\\.\\d+)?\""; 

我替换。,通过(。| \ s),在开头添加它,并替换[\ + - ]?在右边,高度后

答案 2 :(得分:0)

您的问题是.*匹配除换行符之外的任何字符。

您需要添加s modifier。您可以找到示例here

另外,在第二个?案例之后,您忘记了[\\+-]

length ?= ?\"[\\+-]?\\d+(\\.\\d+)?\".*height ?= ?\"[\\+-]?\\d+(\\.\\d+)?\"

Example

在java中它会给你:

Pattern.compile("length ?= ?\"[\\+-]?\\d+(\\.\\d+)?\".*height ?= ?\"[\\+-]?\\d+(\\.\\d+)?\"", Pattern.DOTALL);

请注意,String.matches()不使用标记,但您可以在字符串前使用(?s)以使其正常工作。