PHP正则表达式,包含3个字符串之间的通配符

时间:2015-03-20 15:23:20

标签: php regex

字符串是:

<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看起来像

$end = "Test1234</aaa>";

2 个答案:

答案 0 :(得分:0)

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

取而代之的是在最后一次&#34; >&#34;之后的所有内容:

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

s修饰符就是那个。也匹配行分隔符。

在代码中:

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

如果这些模式对您很重要,您可以进一步扩展以匹配其他两个模式:

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

答案 1 :(得分:0)

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