Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中使用正则表达式查找和替换两个标记之间的字符串?_Php_Regex_Preg Replace_Preg Match - Fatal编程技术网

如何在PHP中使用正则表达式查找和替换两个标记之间的字符串?

如何在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 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是我编程经历中最复杂的事情之一:(