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

3个字符串之间带有通配符的PHP正则表达式,php,regex,Php,Regex,字符串是: <aaa> bbb > bbb > 包括换行符的通配符应位于字符串1和2以及2和3之间 由于我对正则表达式的完全误解,我写了以下内容: $end = preg_replace('/^<aaa>(\s\S)*bbb(\s\S)*>$/','',$start); $end=preg_replace('/^(\s\s)*bbb(\s\s)*>$/','',$start); 有人能帮我做这件事吗?谢谢 例如,我的起始字符串如下: $start =

字符串是:

<aaa>
bbb
>

bbb
>
包括换行符的通配符应位于字符串1和2以及2和3之间

由于我对正则表达式的完全误解,我写了以下内容:

$end = preg_replace('/^<aaa>(\s\S)*bbb(\s\S)*>$/','',$start);
$end=preg_replace('/^(\s\s)*bbb(\s\s)*>$/','',$start);
有人能帮我做这件事吗?谢谢

例如,我的起始字符串如下:

$start = "<aaa><b>QqRr</b>

<zzz>dddbbb

</zzz>Test1234</aaa>";
$start=“QqRr
dddbbb
测试1234”;
结果会是这样的

$end = "Test1234</aaa>";
$end=“Test1234”;

您构建的正则表达式太复杂了

相反,除了最后一个“
”之后的内容,请删除所有内容:

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

代码:

$end = preg_replace('/^.*>([^>]*)$/s','\1', $start);
如果其他两种模式对您很重要,您可以进一步扩展以匹配它们:

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

我最终使用了strip_标签();来解析数据。使用它,您还可以添加允许的标记,因此,任何
最终都可以被替换为\r\n以保留您期望的输出是什么?我已经编辑了这个问题以给出一个示例。使用此站点--创建正则表达式并将其应用于您的需求。您使用正则表达式解析html/xml,您真的不应该这样做。我已经更新了示例和我认为应该更新的正则表达式仍然无法更准确地反映我的情况的工作。谢谢你的意见!如果我将您的上一个扩展代码放入regex101.com,它会给我一个未替换的分隔符错误。在我把它放进我的php页面后,由于某种原因它仍然不能工作。我想我会继续进行更多的故障排除,看看我是否遗漏了什么。
/^<aaa>.*bbb.*>([^>]*)$/s
  ^^^^^  ^^^  ^
    3     2   1