正则表达式不匹配模式与空格和新行

时间:2014-09-02 09:44:09

标签: php regex

我想从字符串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

3 个答案:

答案 0 :(得分:2)

您无需使用任何捕获组。

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

DEMO

答案 1 :(得分:1)

你的正则表达式必须是这样的:

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

您的原始正则表达式有一些错误:

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

http://regexr.com/39e48

此RegEx可能更有效:

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

http://regexr.com/39e4n

答案 2 :(得分:1)

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

试试这个。

参见演示。

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