Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式与打印精美的文件不匹配_Java_Regex - Fatal编程技术网

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

Java 正则表达式与打印精美的文件不匹配,java,regex,Java,Regex,我刚刚开始使用正则表达式,所以我可能会犯一些愚蠢的错误。我有以下正则表达式: String regex = "length ?= ?\"[\\+-]?\\d+(\\.\\d+)?\".*height ?= ?\"[\\+-]\\d+(\\.\\d+)?\""; 这与此文件/字符串正确匹配: <house length="120" prize="2000000" height="28"/> 但它不匹配 <house prize="2000000" lengt

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

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"/>


我觉得这真的很奇怪,因为它应该匹配第二个太。。。任何能为我指明正确方向的帮助都将不胜感激

您需要在模式中使用字符类(例如
[\s\n]
)或使用
模式。多行
(?m)
模式.DOTALL
(?s)

  • 堆栈溢出:
  • 甲骨文:

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

您需要添加。你可以找到例子

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

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

在java中,它将为您提供:

Pattern.compile("length ?= ?\"[\\+-]?\\d+(\\.\\d+)?\".*height ?= ?\"[\\+-]?\\d+(\\.\\d+)?\"", Pattern.DOTALL);
请记住,
String.matches()
不适用于标志,但您可以在字符串前面使用
(?s)
,以使其正常工作。

这似乎有效:

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

我用(.|\s)替换,在开头添加,并替换[\+-]?在右侧,在高度之后

您希望得到什么作为输出?-有/无价值attribute@MayurKoshti我只想检查是否有两个属性长度和高度(可能还有其他属性介于两者之间),以及这些属性的值是否包含带可选小数点的数字。请尝试以下操作:
]*length\=\“([^\“]+)\”[^>]*height=\”([^\“]+)\[^>]*>
多行在这方面对他没有帮助。@naurel:可能需要一些解释。他正在尝试将多行上的模式与
*
匹配。多行修改器使
^
$
匹配行的开始和结束。这不是问题所在。使用此方法将使正则表达式复杂得多。@naurel:他们没有使用
^
$
锚。。。并且可以使用多行模式:。每种情况都需要不同的解决方案,知道选择是什么是很重要的。你没有像他在你的例子中那样匹配相同的东西。如果你能用multiline做他想做的事情,我想学习一下。啊,好吧,问题是我的属性之间有换行符,
与换行符不匹配!正如我从文档中看到的,有两种可能应用
s
修改器。1.在我的字符串和2前面写入
(?s)
。将编译方法调用为
Pattern.compile(someStr,Pattern.DOTALL)这些方法中有哪一种比另一种更受推荐吗?我建议您使用
Pattern.compile(someStr,Pattern.DOTALL)