Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php preg_分割以分离输入_Php_Regex - Fatal编程技术网

Php preg_分割以分离输入

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

我正在用PHP建立一个网站

我正在使用一个
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.

您的预期输出与输入不一致。请修复您的数据。