Java 为什么我的字符串不匹配?
我有一个Java字符串中的多行XML blob,我想从中提取一些值。我知道正则表达式和XML就像原油和意大利面一样混合在一起,但我保证我不会尝试任何复杂的东西 示例XMLJava 为什么我的字符串不匹配?,java,regex,Java,Regex,我有一个Java字符串中的多行XML blob,我想从中提取一些值。我知道正则表达式和XML就像原油和意大利面一样混合在一起,但我保证我不会尝试任何复杂的东西 示例XML对象字符串: <ObjectDto> <created>1313825589244</created> <description>description</description> <id>649</id> <isFoo&g
对象
字符串:
<ObjectDto>
<created>1313825589244</created>
<description>description</description>
<id>649</id>
<isFoo>true</isFoo>
<ObjectDto>
1313825589244
描述
649
符合事实的
我只想让object.matches(“true”)
计算为true
。我试着用*
(和[\n.]*
包装正则表达式的内容,以防换行符抛出它),但没有乐趣
为什么不匹配?因为您还没有阅读文档 尝试根据模式匹配整个输入序列 如果匹配成功,则可以通过 开始、结束和分组方法
您应该在开始和结束处添加一个非贪婪点运算符,或者只使用
find()
方法。我没有足够努力地匹配换行符,而是启用了DOTALL(?s)。*true.
修复了它。正如我提到的,您应该使用非贪婪版本。因为否则。*匹配完整的输入,match会发现RE的某些部分仍然不匹配->ergo no match,尽管我总是忘记java RE库的细节。我不会争辩Regex是完成此任务的好工具,但我不确定你对它们的解释。使用(?s)。*true.
(注意额外贪婪
)效果很好。是的,你说得对-问题是有几十个不同的re库。Java a)在默认情况下不使用所有格运算符(这是个好主意)和b)因为您发现自己在默认情况下不匹配换行符(这在我看来很烦人,但肯定是perl的错)