我想知道是否有一种快速的方式使用reg exp来提取垂直点之前的内容。我可能会使用爆炸但需要很长时间的处理。
示例字符串案例:
1. $str = 'a.b({ _first7 :1, second:2});';
2. $str = ' _first7 :1, second:2});'; // no bracket before _first7, and there is a space
3. $str = ' second:2});';
我需要在案例(1,2)中获得_first7和第二,在案例3中获得第二。
我试图在{和:for _first7之间提取它并且它有效,但对于情况#2它不起作用。我试图在两者之间进行提取,并且:得到第二个并且它可以工作但是对于第三种情况它不起作用。
像这样:$result = preg_match('/\{([a-zA-Z0-9_ ]+)\:/', $str, $output);
$result = preg_match('/\,([a-zA-Z0-9_ ]+)\:/', $str, $output);
另外,我不知道如何合并两个表达式以将_first7,second,... n var一起放在数组中并处理它们?
非常感谢您对完整解决方案的帮助。
谢谢!
答案 0 :(得分:1)
基本上,您正在寻找键值对的键。
/[a-z0-9_]+(?=\s*:)/i
应该这样做。
答案 1 :(得分:1)
这样的模式应该有效:
(\w+)\s*:
但是你必须提取第一个捕获组。例如:
$str = 'a.b({ _first7 :1, second:2});';
$result = preg_match_all('/(\w+)\s*:/', $str, $output);
print_r($output[1]);
// Array ( [0] => _first7 [1] => second )
或者你可以使用前瞻:
\w+(?=\s*:)
例如:
$str = 'a.b({ _first7 :1, second:2});';
$result = preg_match_all('/\w+(?=\s*:)/', $str, $output);
print_r($output[0]);
// Array ( [0] => _first7 [1] => second )