在3个字符串之间带有通配符的PHP正则表达式


PHP regex with wildcards between 3 strings

字符串为:

<aaa>
bbb
>

通配符应包括换行符,应介于字符串1和2以及2和3 之间

由于我对正则表达式完全误解,我写下了这样的话:

$end = preg_replace('/^<aaa>('s'S)*bbb('s'S)*>$/','',$start);

有人能帮我做这件事吗?谢谢

举个例子,我的起始字符串是:

$start = "<aaa><b>QqRr</b>
<zzz>dddbbb
</zzz>Test1234</aaa>";

最后看起来像

$end = "Test1234</aaa>";

您构建正则表达式过于复杂。

相反,删除所有,但最后一个">"之后的内容:

/^.*>([^>]*)$/s
    ^
    1

s修饰符就是这样。也匹配行分隔符。

代码中:

$end = preg_replace('/^.*>([^>]*)$/s',''1', $start);

然后,如果其他两种模式对您很重要,您可以进一步扩展以匹配它们:

/^<aaa>.*bbb.*>([^>]*)$/s
  ^^^^^  ^^^  ^
    3     2   1

我最终使用了strip_tags();以解析数据。有了它,您还可以添加允许的标记,因此任何
最终都可以被替换为''r''n以保持