如何从示例中删除部分字符串:
@@ lang_eng_begin @@测试@@ lang_eng_end @@ @@ lang_fr_begin @@学校@@ lang_fr_end @@ @@ lang_esp_begin @@ test33 @@ lang_esp_end @@
我总是希望拉出字符串的中间部分:test, school, test33
。从这个字符串。
我读了关于ltrim,substr和其他但我没有好主意如何做到这一点。因为每个字符串可以有其他长度,例如:
' eng',' fr'
我只想在@@和@@之间输入中间的字符串。对Maye有人可以帮助我吗?我试过了:
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 @@
在下一行,所以我想知道如何解决这个问题
答案 0 :(得分:1)
如果您的字符串始终采用此格式,则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 +字符。