在正则表达式模式(PHP)中包含OR


Including OR in a regex pattern (PHP)

尝试创建包含条件的模式。

$pattern["body"]='/(<'/a><'/li><'/ul><'/div><p>|<h2>)(.*)<div class="like">/s';

模式应该将一系列"<'/a><'/li><'/ul><'/div><p>">"<h2>"之间的任何文本识别为起始分隔符,但显然或条件在这种情况下不起作用。任何人都可以提供正确语法的提示!?我努力了1个小时,但我已经失去了对这条规则的专注和耐心。提前谢谢你。

"(?<=</a></li></ul></div>|<h2>).*"

参见下面的grep测试:

kent$  echo "</a></li></ul></div>something"|grep -Po "(?<=</a></li></ul></div>|<h2>).*"                                                  
something
kent$  echo "<h2>something"|grep -Po "(?<=</a></li></ul></div>|<h2>).*"                                                                  
something
'%(</a></li></ul></div><p>|<h2>)(.*)<div class="like">%s'

我没有任何样本数据可以测试,但看起来你在那里。我只是更改了分隔符,这样就不必转义,我发现它更容易理解。

这可能有效http://www.ideone.com/zYB1n
但是,我不是php专家。

$regex = '/(?:<'/a>'s*<'/li>'s*<'/ul>'s*<'/div>'s*<p>|<h2>)(?<Text>['S's]*)(?=<div class="like">)/';
if (preg_match( $regex, $str1, $matches ))
  print_r( $matches['Text'] );