php - preg_split 由空格和制表符外引号

标签 php regex preg-split

我正在尝试让 preg_split() 按空格/制表符拆分以下 2 个字符串(需要对两者都起作用)。

autodiscover.microsoft.com. 3600 IN A   131.107.125.5

microsoft.com.      3600    IN  TXT "v=spf1 include:_spf-a.microsoft.com include:_spf-b.microsoft.com include:_spf-c.microsoft.com -all"

诀窍是在第二种情况下,带引号的最后部分不应拆分。

通过查看 StackOverflow,我发现我可能需要使用它。

$results = preg_split("/'[^']*'(*SKIP)(*F)|\x20/", $str);

遗憾的是我无法让它工作。 例如,我已经尝试过几种类似的方法,但没有任何效果。

"\s+"(*SKIP)(*F)|\x20

提前致谢。

最佳答案

只需根据以下正则表达式拆分您的输入即可。 \h+ 匹配一个或多个水平空格字符,即空格、制表符。

(?:'[^']*'|"[^"]*")(*SKIP)(*F)|\h+

(?:'[^']*'|"[^"]*") 匹配所有单引号和双引号字符串。(*SKIP)(*F) 导致匹配失败,并选择所有与 | 之后出现的模式匹配的字符。在我们的例子中,它是 \h+ 匹配一个或更多水平空间。

DEMO

$str = 'microsoft.com.      3600    IN  TXT "v=spf1 include:_spf-a.microsoft.com include:_spf-b.microsoft.com include:_spf-c.microsoft.com -all"';
$match =  preg_split('~(?:\'[^\']*\'|"[^"]*")(*SKIP)(*F)|\h+~', $str);
print_r($match);

输出:

Array
(
    [0] => microsoft.com.
    [1] => 3600
    [2] => IN
    [3] => TXT
    [4] => "v=spf1 include:_spf-a.microsoft.com include:_spf-b.microsoft.com include:_spf-c.microsoft.com -all"
)

关于php - preg_split 由空格和制表符外引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28584839/

相关文章:

php - WordPress 的 while 循环中的第一篇文章

python - 获取Python匹配对象中的所有未命名组

php - 使用 PHP 套接字开始使用 FIX 协议(protocol)

javascript - Laravel TokenMismatchException 和 dropzone

PHP/MySQL 作业队列系统多次执行作业

正则表达式:抓取两个单引号之间的第二个字符串

javascript - RegEx 只找到第一个值

php preg_split 不识别空格

php - 特定标签之间的 preg_split 值

php preg_split 第一个大写