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

包含或在正则表达式模式(PHP)中,php,regex,preg-match,Php,Regex,Preg Match,尝试创建包含或条件的模式 $pattern["body"]='/(<\/a><\/li><\/ul><\/div><p>|<h2>)(.*)<div class="like">/s'; $pattern[“body”]='/(|)(.*)/s'; 模式应该识别一系列“”或“”之间的任何文本作为起始分隔符,但在这种情况下,or条件显然不起作用。 任何人都可以提供正确语法的提示!?我努力了1个小时,我已经失去了专

尝试创建包含条件的模式

$pattern["body"]='/(<\/a><\/li><\/ul><\/div><p>|<h2>)(.*)<div class="like">/s';
$pattern[“body”]='/(|)(.*)/s';
模式应该识别一系列“
或“
”之间的任何文本作为起始分隔符,但在这种情况下,or条件显然不起作用。 任何人都可以提供正确语法的提示!?我努力了1个小时,我已经失去了专注和耐心。 提前谢谢。

“(?
”%(|)(.*)%s”
"(?<=</a></li></ul></div>|<h2>).*"
我没有任何要测试的示例数据,但看起来您在那里。我只是更改了分隔符,这样就不必转义,我发现它更容易理解。

这可能有效
但是,我不是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'] );
$regex='/(?:\s*\s*\s*\s*)(?[\s\s]*)(?=)/;
if(预匹配($regex,$str1,$matches))
打印($matches['Text']);

您在问题标题中指定了
ereg
。我应该指出,PHP中的
ereg
函数已经被弃用,不应该再使用了。您应该改用
preg
函数。有关更多信息,请参阅PHP手册。对不起!我使用了regex。我将更改主题谢谢!这是什么意思?@Armand go到,然后搜索“(?谢谢。这意味着需要积极的先行断言。实际上,这是一个积极的后顾断言。由于某些不清楚的原因,它不起作用,但上面Kent提供的示例是有效的。@Armand-那么,区别在于正则表达式中额外的
和尾部的
。如果Kent成功了,那么您的问题陈述是不正确的。我在Kent的代码中添加了额外的和。秘密是?如果您添加了额外的返回,我会说您很幸运,它显然PHP(PCRE)允许更改其固定长度的外观。一旦标记之间出现虚假空白,它可能会失败。
'%(</a></li></ul></div><p>|<h2>)(.*)<div class="like">%s'
$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'] );