尝试创建包含或条件的模式。
$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'] );