如何在PHP中使用正则表达式查找和替换两个标记之间的字符串?
如果我们有这样的文本: [SYS 1]第1页,共2页:[/SYS] Lorem Ipsum只是印刷和排版的虚拟文本 工业。Lorem Ipsum已成为行业标准 [SYS 2]第2页,共2页:[/SYS] 它不仅存活了五个世纪,而且还跨越了 电子排版,基本保持不变 如何仅在[SYS]和[/SYS]标记之间保留文本?像这样: 第1页,共2页: Lorem Ipsum只是印刷和排版的虚拟文本 工业。Lorem Ipsum已成为行业标准 第2页,共2页: 它不仅存活了五个世纪,而且还跨越了 电子排版,基本保持不变 我认为下面的正则表达式会在两个没有属性的标记中找到文本:如何在PHP中使用正则表达式查找和替换两个标记之间的字符串?,php,regex,preg-replace,preg-match,Php,Regex,Preg Replace,Preg Match,如果我们有这样的文本: [SYS 1]第1页,共2页:[/SYS] Lorem Ipsum只是印刷和排版的虚拟文本 工业。Lorem Ipsum已成为行业标准 [SYS 2]第2页,共2页:[/SYS] 它不仅存活了五个世纪,而且还跨越了 电子排版,基本保持不变 如何仅在[SYS]和[/SYS]标记之间保留文本?像这样: 第1页,共2页: Lorem Ipsum只是印刷和排版的虚拟文本 工业。Lorem Ipsum已成为行业标准 第2页,共2页: 它不仅存活了五个世纪,而且还跨越了 电子排版,基
/\[SYS\](.+?)\[\/SYS\]/
但是如何用该标记的内部文本(或任何其他字符串)替换整个元素?您可以这样替换:
$re = "/\\[\\/?SYS(?:\\s\\d+)?\\]/";
$str = "[SYS 1]Page 1 from 2:[/SYS]";
echo preg_replace($re, "", $str)
您可以这样替换:
$re = "/\\[\\/?SYS(?:\\s\\d+)?\\]/";
$str = "[SYS 1]Page 1 from 2:[/SYS]";
echo preg_replace($re, "", $str)
使用以下表达式:
\[SYS[^]]*\](.+?)\[/SYS\]
并替换为$1
,请参阅。
在
PHP
中:
$regex = '~\[SYS[^]]*\](.+?)\[/SYS\]~';
$string = preg_replace($regex, '$1', $your_original_string);
有关上的完整代码,请参见演示。使用以下表达式:
\[SYS[^]]*\](.+?)\[/SYS\]
并替换为$1
,请参阅。
在
PHP
中:
$regex = '~\[SYS[^]]*\](.+?)\[/SYS\]~';
$string = preg_replace($regex, '$1', $your_original_string);
查看上的完整代码演示。您的正则表达式看起来很接近(很好),但我会使用它:
/\[SYS\d+\](.*?\[\/SYS\]/
。。。找到这个,并替换为第一个捕获组。您的正则表达式看起来很接近(很好),但我会使用它:/\[SYS\d+\](.*?\[\/SYS\]/
。。。在此上查找,并替换为第一个捕获组。它将仅删除“[SYS n]”和“[/SYS]”吗?如果我以后要替换这些标记之间的文本,该怎么办?@asDca21然后使用$re=“/\\\[SYS\\d+\\](.*?\\[\\/SYS\\]/”代码> @ ToMasayoub:这里需要更多的反斜杠:还考虑使用另一个定界符,例如“代码> ~ > .JAN,您将删除哪些反斜杠?请参见上面的答案:”它只删除“[sys N]”和“[/sys”)。如果我以后要替换这些标记之间的文本,该怎么办?@asDca21然后使用$re=“/\\\[SYS\\d+\\](.*?\\[\\/SYS\\]/”代码> @ ToMasayoub:这里需要更多的反斜杠:也考虑使用另一个定界符,例如“代码> ~ > .JAN,您将删除哪些反斜杠?请看上面的答案:”非常感谢。Regex是我编程经历中最复杂的事情之一:(非常感谢。Regex是我编程经历中最复杂的事情之一:(