对 PHP 中的字符串进行操作。删除部分字符串
Operation on string in PHP. Remove part of string
如何从示例中删除部分字符串:
@@lang_eng_begin@@test@@lang_eng_end@@
@@lang_fr_begin@@school@@lang_fr_end@@
@@lang_esp_begin@@test33@@lang_esp_end@@
我一直想拉弦的中间:test, school, test33
。从这个字符串。
我阅读了有关 ltrim、substr 和其他内容的信息,但我不知道如何执行此操作。因为每个字符串都可以有其他长度,例如:
'eng', 'fr'
我只想要@@ 和@@ 中间的字符串。到梅耶有人可以帮助我吗?我试过了:
foreach ($article as $art) {
$title = $art->titl = str_replace("@@lang_eng_begin@@", "", $art->title);
$art->cleanTitle = str_replace("@@lang_eng_end@@", "", $title);
}
但是
@@lang_eng_end@@
可以改成
@@lang_ger_end@@
在下一行,所以我不知道如何解决这个问题
如果您的字符串总是这种格式,explode
方式看起来很简单:
$str = "@@lang_eng_begin@@test@@lang_eng_end@@ ";
$res = explode("@@", $str)[2];
echo $res;
您可以使用正则表达式并提取非起始 @@
和下一个 @@
:
之间的值
$re = "/(?!^)@@(.*?)@@/";
$str = "@@lang_eng_begin@@test@@lang_eng_end@@ ";
preg_match($re, $str, $match);
print_r($match[1]);
参见PHP demo。在这里,正则表达式匹配一个不在字符串开头的 @@
((?!^)@@
),然后将除换行符之外的任何 0+ 个字符尽可能少地捕获到第 1 组 ((.*?)
)到第一个 @@
子串。
或者,将所有 @@...@@
子字符串替换为 `preg_replace:
$re = "/@@.*?@@/";
$str = "@@lang_eng_begin@@test@@lang_eng_end@@ ";
echo preg_replace($re, "", $str);
参见 another demo。在这里,我们只删除所有以 @@
开头的非重叠子字符串,然后在第一个 @@
.
之前有除换行符以外的任何 0+ 个字符
如何从示例中删除部分字符串:
@@lang_eng_begin@@test@@lang_eng_end@@ @@lang_fr_begin@@school@@lang_fr_end@@ @@lang_esp_begin@@test33@@lang_esp_end@@
我一直想拉弦的中间:test, school, test33
。从这个字符串。
我阅读了有关 ltrim、substr 和其他内容的信息,但我不知道如何执行此操作。因为每个字符串都可以有其他长度,例如:
'eng', 'fr'
我只想要@@ 和@@ 中间的字符串。到梅耶有人可以帮助我吗?我试过了:
foreach ($article as $art) {
$title = $art->titl = str_replace("@@lang_eng_begin@@", "", $art->title);
$art->cleanTitle = str_replace("@@lang_eng_end@@", "", $title);
}
但是
@@lang_eng_end@@
可以改成
@@lang_ger_end@@
在下一行,所以我不知道如何解决这个问题
如果您的字符串总是这种格式,explode
方式看起来很简单:
$str = "@@lang_eng_begin@@test@@lang_eng_end@@ ";
$res = explode("@@", $str)[2];
echo $res;
您可以使用正则表达式并提取非起始 @@
和下一个 @@
:
$re = "/(?!^)@@(.*?)@@/";
$str = "@@lang_eng_begin@@test@@lang_eng_end@@ ";
preg_match($re, $str, $match);
print_r($match[1]);
参见PHP demo。在这里,正则表达式匹配一个不在字符串开头的 @@
((?!^)@@
),然后将除换行符之外的任何 0+ 个字符尽可能少地捕获到第 1 组 ((.*?)
)到第一个 @@
子串。
或者,将所有 @@...@@
子字符串替换为 `preg_replace:
$re = "/@@.*?@@/";
$str = "@@lang_eng_begin@@test@@lang_eng_end@@ ";
echo preg_replace($re, "", $str);
参见 another demo。在这里,我们只删除所有以 @@
开头的非重叠子字符串,然后在第一个 @@
.