我正在尝试找到一种解决方案,该方法如何删除括号中特定值之外的所有内容,包括括号中的值。这就是我的意思。我有这个字符串
$str = "[:de]Some german text[:en]Some English text[:]";
为了获得[:de]和[:en]之间的文本并删除所有其他内容,因此我想要达到的目标,所以结果必须是
$str = "Some german text";
我想应该是一些preg_match或某些regex解决方案,但我发现的是如何删除中间的文本,而不是中间的文本并删除其他所有内容。
欢迎提出任何想法。
我猜,
(?<=\[: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中查看它如何与某些示例输入匹配。
[jex.im可视化正则表达式:
感谢Emma的回答,这是我提出的解决方案。
$re = '/(?<=\[:de\]).*?(?=\[:en\])/s';
$result = preg_match($re, $str, $match);
$result = $match[0];