我知道如何将空格分成数组:
$array = array_filter(preg_split('/\s+/',$a));
但如果字符串$a
有引号,我希望正则表达式忽略其中的所有空格。
例如:
字符串:
@ IN TXT" V = SPF1 A MX IP4:x.x.x.x~ALL"
将拆分为数组部分:
答案 0 :(得分:1)
您可以利用用于丢弃模式的PCRE
动词SKIP
和FAIL
。想法是丢弃引号内的内容,因此你可以使用这样的正则表达式:
".*?"(*SKIP)(*FAIL)|\s+
<强> Working demo 强>
但是,如果您想使用"
或'
,可以使用此正则表达式:
(["']).*?\1(*SKIP)(*FAIL)|\s+
$keywords = preg_split("/([\"']).*?\1(*SKIP)(*FAIL)|\s+/", $a);
另一方面,你也可以使用另一个正则表达式来捕捉你想要的东西:
(".*"|'.*?'|\S+)
<强> Working demo 强>
$re = "/(\".*\"|'.*?'|\\S+)/";
$str = "@ IN TXT \"V=SPF1 A MX IP4:x.x.x.x ~ALL\" 'asdf asdf'";
preg_match_all($re, $str, $matches);
答案 1 :(得分:0)
您可以尝试php artisan queue:restart
,这应该与您要查找的内容相匹配。
https://regex101.com/r/aZ7nJ8/2
一种相当粗暴的方式,但它的技巧和它包含引号,如果你不想要它们,你总是可以使用前瞻和后视。