删除字符串中括号中特定值之外的所有内容 PHP
Remove everything outside specific value in brackets in a string PHP
我正在尝试找到一种解决方案,以解决如何删除括号中特定值以外的所有内容,包括括号中的值。
这就是我的意思。我有这个字符串
$str = "[:de]Some german text[:en]Some English text[:]";
我想要实现的是获取 [:de] 和 [:en] 之间的文本并删除其他所有内容,因此结果必须是
$str = "Some german text";
我猜它应该是一些 preg_match 或一些正则表达式解决方案,但我发现的只是,如何删除中间的文本,而不是保留中间的文本并删除其他所有内容。
欢迎提出任何想法。
我猜,
(?<=\[: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"
}
}
如果您希望 simplify/modify/explore 表达式,regex101.com. If you'd like, you can also watch in this link 的右上面板已对其进行说明,它将如何匹配一些样本输入。
正则表达式电路
jex.im 可视化正则表达式:
感谢 Emma 的回答,这就是我想出的解决方案。
$re = '/(?<=\[:de\]).*?(?=\[:en\])/s';
$result = preg_match($re, $str, $match);
$result = $match[0];
我正在尝试找到一种解决方案,以解决如何删除括号中特定值以外的所有内容,包括括号中的值。 这就是我的意思。我有这个字符串
$str = "[:de]Some german text[:en]Some English text[:]";
我想要实现的是获取 [:de] 和 [:en] 之间的文本并删除其他所有内容,因此结果必须是
$str = "Some german text";
我猜它应该是一些 preg_match 或一些正则表达式解决方案,但我发现的只是,如何删除中间的文本,而不是保留中间的文本并删除其他所有内容。
欢迎提出任何想法。
我猜,
(?<=\[: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"
}
}
如果您希望 simplify/modify/explore 表达式,regex101.com. If you'd like, you can also watch in this link 的右上面板已对其进行说明,它将如何匹配一些样本输入。
正则表达式电路
jex.im 可视化正则表达式:
感谢 Emma 的回答,这就是我想出的解决方案。
$re = '/(?<=\[:de\]).*?(?=\[:en\])/s';
$result = preg_match($re, $str, $match);
$result = $match[0];