Regex与带有空格和新行的模式不匹配


Regex not matching the pattern with spaces and new lines

我正试图从字符串Passed, <strong class="has_warnings">2 warning(s)</strong>中获取。我是正则表达式中的一个小人物,请帮忙。

$str_html = '
<td colspan="2" class="valid">
    Passed, <strong class="has_warnings">2 warning(s)</strong>   
</td> '
preg_match('#<td colspan="2" class="valid">(.*?)</td>#', $str_html, $data_html_errors);

可以在此处找到实时的非格式化正则表达式。

http://regexr.com/39e45

您不需要使用任何捕获组。

<td colspan="2" class="valid">'s*'K.*?(?='s+<'/td)

演示

 <td[^>]*?>(.*?)<'/td>

试试这个。

请参阅演示。

http://regex101.com/r/sA7pZ0/29

您的正则表达式必须如下所示:

/<td colspan="2" class="valid">(['s'S]*)<'/td>/

你原来的Regex有几个错误:

  • .与制表符、换行符不匹配,但您的字符串包含它们
  • ?是不必要的。如果您希望td中的内容是可选的,则*已经意味着0或更多

http://regexr.com/39e48

这种RegEx可能更高效:

/<td colspan="2" class="valid">(((?!<'/td>)['s'S])+)<'/td>/

http://regexr.com/39e4n