Php preg_分割以分离输入
我正在用PHP建立一个网站 我正在使用一个Php preg_分割以分离输入,php,regex,Php,Regex,我正在用PHP建立一个网站 我正在使用一个preg_split()来分隔一个给定的字符串,它看起来像+word1-word2-“word-word”。 但是我需要它们的格式如下:+word1,-word2,-word 目前,我有一个: $words = preg_split("/[\s\"]*\"([^\"]+)\"[\s\"]*|" . "[\s\"]*'([^']+)'[\s\"]*|" . "[\s\"]+/", $search_expression, 0, PREG_SPLIT_NO_E
preg_split()
来分隔一个给定的字符串,它看起来像+word1-word2-“word-word”
。
但是我需要它们的格式如下:+word1
,-word2
,-word
目前,我有一个:
$words = preg_split("/[\s\"]*\"([^\"]+)\"[\s\"]*|" . "[\s\"]*'([^']+)'[\s\"]*|" . "[\s\"]+/", $search_expression, 0, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
但它并没有像我希望的那样工作:我需要用这种方式来让它工作:
+word1-word2'-“word-word”
有人有更好的正则表达式或想法吗?一个选项是从双引号匹配到双引号,并且不要使用拆分来拆分匹配。然后匹配要拆分的1+水平空白字符
"[^"]+"(*SKIP)(*FAIL)|\h+
|
比如说
$search_expression = '+word1 -word2 -"word word"';
$words = preg_split("~\"[^\"]+\"(*SKIP)(*FAIL)|\h+~", $search_expression);
print_r($words);
输出
Array
(
[0] => +word1
[1] => -word2
[2] => -"word word"
)
贪心
?
的简单表达式适用于匹配示例:
preg_match_all('/[+-][^+-]+ ?/', $search_expression, $matches);
print_r($matches[0]);
收益率:
Array
(
[0] => +word1
[1] => -word2
[2] => -"word word"
)
Se.您的预期输出与输入不一致。请修复您的数据。