当匹配单行时,正则表达式不匹配多个结果

时间:2014-02-17 19:45:33

标签: c# xml regex

任何使用正则表达式的人都很方便吗?..

我正在运行以下RegEx:

<body>.*</body>    

在以下文字中:

<text>initial text</text>
 <comment>
   <user>
     6
   </user>
   <date>
     635277984371174139
   </date>
   <body>
     Recorded clinical data: 0132.00 Managing director dawd
   </body>
 </comment>
 <comment>
   <user>
     6
   </user>
   <date>
     635277984559612059
   </date>
   <body>
     Recorded clinical data: 0132.00 Managing director ii
   </body>
 </comment>
 <comment>
   <type>
     Completed
   </type>
   <user>
     6
   </user>
   <date>
     635277984668163579
   </date>
   <body>
     kkk
   </body>
 </comment>

然而,这只会导致一场比赛...我希望有3场比赛......任何人都知道为什么?

2 个答案:

答案 0 :(得分:3)

  1. 你不应该用正则表达式解析HTML(除非是HTML的简单和不变的片段),你冒着奇怪的错误:RegEx match open tags except XHTML self-contained tags

  2. 您的正则表达式失败,因为*贪心量词。这意味着它将尽可能地“吃掉”:这将从第一个<body>到最后一个匹配,包括内部的<body>.*?</body> 。你想要的是

    ?

    {{1}}使量词非贪婪,它会在第一场比赛时停止。

  3. 您应该编辑您的问题,因为您的HTML目前不可读。

答案 1 :(得分:1)

你的表情很贪婪。 .*会将所有内容匹配到最后,然后回溯到找到<\/body>的位置。

你需要让你的正则表达式变得懒惰,就像这样 -

<body>.*?<\/body>

展示here