删除字符串PHP中括号内特定值之外的所有内容

问题描述 投票:0回答:2

我正在尝试找到一种解决方案,该方法如何删除括号中特定值之外的所有内容,包括括号中的值。这就是我的意思。我有这个字符串

$str = "[:de]Some german text[:en]Some English text[:]";

为了获得[:de]和[:en]之间的文本并删除所有其他内容,因此我想要达到的目标,所以结果必须是

$str = "Some german text";

我想应该是一些preg_match或某些regex解决方案,但我发现的是如何删除中间的文本,而不是中间的文本并删除其他所有内容。

欢迎提出任何想法。

php regex preg-match
2个回答
2
投票

我猜,

(?<=\[:de\]).*?(?=\[:en\])

可以在这里正常工作。

测试

$re = '/(?<=\[:de\]).*?(?=\[:en\])/s';
$str = '[:de]Some german text 1[:en]Some English text[:] [:de]Some german text 2[:en]Some English text[:]
[:de]Some german text 3[:en]Some English text[:]';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

var_dump($matches);

输出

array(3) {
  [0]=>
  array(1) {
    [0]=>
    string(18) "Some german text 1"
  }
  [1]=>
  array(1) {
    [0]=>
    string(18) "Some german text 2"
  }
  [2]=>
  array(1) {
    [0]=>
    string(18) "Some german text 3"
  }
}

[如果您想简化/修改/探索表达式,请在regex101.com的右上角进行说明。如果需要,您还可以在this link中查看它如何与某些示例输入匹配。


RegEx电路

[jex.im可视化正则表达式:

enter image description here


0
投票

感谢Emma的回答,这是我提出的解决方案。

$re = '/(?<=\[:de\]).*?(?=\[:en\])/s';
$result = preg_match($re, $str, $match);
$result = $match[0];
© www.soinside.com 2019 - 2024. All rights reserved.