如何使用正则表达式删除标记及其内容?

use*_*580 9 php regex

$ str ='一些文字标签内容 更多文字';

我的问题是:如何检索tag <em>contents </em>介于两者之间的内容<MY_TAG> .. </MY_TAG>

如何删除<MY_TAG>及其内容$str

我正在使用PHP.

谢谢.

Gum*_*mbo 11

如果MY_TAG无法嵌套,请尝试以获取匹配项:

preg_match_all('/<MY_TAG>(.*?)<\/MY_TAG>/s', $str, $matches)
Run Code Online (Sandbox Code Playgroud)

要删除它们,请preg_replace改用.


squ*_*ndy 7

为了删除我最终只使用这个:

$str = preg_replace('~<MY_TAG(.*?)</MY_TAG>~Usi', "", $str);
Run Code Online (Sandbox Code Playgroud)

使用〜而不是/为分隔符解决了由于结束标记中的反斜杠而引发的错误,即使转义也似乎是一个问题.从开始标记中删除>允许属性或其他字符,并仍然获取标记及其所有内容.

这仅适用于嵌套不是问题的地方.

所述Usi改性剂的意思是U = Ungreedy,S =包括换行符字符,I =不区分大小写.