如何在我的正则表达式中用引号中的字符串排除?

时间:2016-07-27 16:34:18

标签: php regex

我想将除字符串之外的所有内容都捕获到引号中,有没有办法轻松完成?

正则表达式如下:\b([\w]+)\b|("([^"])*")

此处包含引号的示例:

http://imgur.com/a/MsFNp

2 个答案:

答案 0 :(得分:2)

PHP有一个名为*SKIP/*FAIL的好功能(名为回溯控制动词,因为@Federico指出正确):

"[^"]+"(*SKIP)(*FAIL) # everything to the left will be ignored
|                     # or
\b(\w+)\b             # a word surrounded by boundaries

请参阅a demo on regex101.com

<小时/> 在PHP中,这将是:

$regex = '~"[^"]+"(*SKIP)(*FAIL)|\b(\w+)\b~';
$string = 'this one "but this one not" but again this one';
preg_match_all($regex, $string, $matches);
print_r($matches);

答案 1 :(得分:0)

我熟的版本:

"[^"]*"\s*\K(\w+)|(\w+)

Live Demo