在PHP中对字符串进行操作。删除字符串

时间:2016-09-09 10:02:01

标签: php string cut substr

如何从示例中删除部分字符串:

  

@@ 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 @@

在下一行,所以我想知道如何解决这个问题

1 个答案:

答案 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 +字符。