示例字符串:
$string = 'text text text text {capture this1, this2} text text text text';
我想使用preg_match
,只在数组中获取这些this1
和this2
,而不是其他内容。
我正在尝试这样的事情:
$array = array();
$reg = '/\{capture.*\}/'; //this needs changing
preg_match($reg, $string, $array);
var_dump($array);
这会捕获{capture this1, this2}
。如何从正则表达式中排除“{”符号?我正在尝试像.!\{
这样的东西,但它给了我错误。有什么建议吗?
答案 0 :(得分:1)
您可以尝试使用以下正则表达式:
/\{(capture[^}]*)\}/
答案 1 :(得分:1)
您可以使用:
$pattern = '~(?:{capture |\G(?<!\A), )\K[^,}]+(?=(})?)~';
$data = 'text text text {capture this1, this2} text text';
$tmp = array();
if (preg_match_all($pattern, $data, $matches, PREG_SET_ORDER)) {
foreach($matches as $m) {
$tmp[] = $m[0];
if (isset($m[1])) {
$result = $tmp;
break;
}
}
}
print_r($result);
此模式避免使用此前瞻(?=[^}]*})
来检查结束大括号的存在并使用更快的测试(?=(})?)
。如果捕获组存在,则表示括号已关闭。
但是我认为Shankar Damodaran方法更简单(也可能更有效)。