preg_split by space 并在引号外制表
preg_split by space and tab outside quotes
我正在尝试让 preg_split()
拆分以下 2 个字符串,方法是 space/tab(需要对两者都进行处理)。
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"
诀窍是在第二个实例中,带引号的最后部分不应拆分。
通过查看 Whosebug,我发现我可能需要使用它。
$results = preg_split("/'[^']*'(*SKIP)(*F)|\x20/", $str);
遗憾的是我无法让它工作。
例如,我已经尝试过几种类似的方法,但没有任何效果。
"\s+"(*SKIP)(*F)|\x20
提前致谢。
只需根据以下正则表达式拆分您的输入即可。 \h+
匹配一个或多个水平 space 字符,即 spaces 、制表符。
(?:'[^']*'|"[^"]*")(*SKIP)(*F)|\h+
(?:'[^']*'|"[^"]*")
匹配所有单引号和双引号字符串。 (*SKIP)(*F)
导致匹配失败并选择所有与 |
之后出现的模式匹配的字符。在我们的例子中,它是 \h+
匹配一个或多个水平 spaces.
$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"
)
我正在尝试让 preg_split()
拆分以下 2 个字符串,方法是 space/tab(需要对两者都进行处理)。
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"
诀窍是在第二个实例中,带引号的最后部分不应拆分。
通过查看 Whosebug,我发现我可能需要使用它。
$results = preg_split("/'[^']*'(*SKIP)(*F)|\x20/", $str);
遗憾的是我无法让它工作。 例如,我已经尝试过几种类似的方法,但没有任何效果。
"\s+"(*SKIP)(*F)|\x20
提前致谢。
只需根据以下正则表达式拆分您的输入即可。 \h+
匹配一个或多个水平 space 字符,即 spaces 、制表符。
(?:'[^']*'|"[^"]*")(*SKIP)(*F)|\h+
(?:'[^']*'|"[^"]*")
匹配所有单引号和双引号字符串。 (*SKIP)(*F)
导致匹配失败并选择所有与 |
之后出现的模式匹配的字符。在我们的例子中,它是 \h+
匹配一个或多个水平 spaces.
$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"
)