Java 为什么我的字符串不匹配?

Java 为什么我的字符串不匹配?,java,regex,Java,Regex,我有一个Java字符串中的多行XML blob,我想从中提取一些值。我知道正则表达式和XML就像原油和意大利面一样混合在一起,但我保证我不会尝试任何复杂的东西 示例XML对象字符串: <ObjectDto> <created>1313825589244</created> <description>description</description> <id>649</id> <isFoo&g

我有一个Java字符串中的多行XML blob,我想从中提取一些值。我知道正则表达式和XML就像原油和意大利面一样混合在一起,但我保证我不会尝试任何复杂的东西

示例XML
对象
字符串:

<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的错)