如何爆炸以下字符串:
Lorem ipsum "dolor sit amet" consectetur "adipiscing elit" dolor
进入
array("Lorem", "ipsum", "dolor sit amet", "consectetur", "adipiscing elit", "dolor")
以便将引号中的文本视为一个单词。
这是我现在拥有的:
$mytext = "Lorem ipsum %22dolor sit amet%22 consectetur %22adipiscing elit%22 dolor" $noquotes = str_replace("%22", "", $mytext"); $newarray = explode(" ", $noquotes);
但是我的代码将每个单词分成一个数组。如何使引号内的单词被视为一个单词?
您可以使用preg_match_all(...):
preg_match_all(...)
$text = 'Lorem ipsum "dolor sit amet" consectetur "adipiscing \\"elit" dolor'; preg_match_all('/"(?:\\\\.|[^\\\\"])*"|\S+/', $text, $matches); print_r($matches);
会产生:
Array ( [0] => Array ( [0] => Lorem [1] => ipsum [2] => "dolor sit amet" [3] => consectetur [4] => "adipiscing \"elit" [5] => dolor ) )
如您所见,它还考虑了带引号的字符串中的转义引号。
编辑
简短说明:
" # match the character '"' (?: # start non-capture group 1 \\ # match the character '\' . # match any character except line breaks | # OR [^\\"] # match any character except '\' and '"' )* # end non-capture group 1 and repeat it zero or more times " # match the character '"' | # OR \S+ # match a non-whitespace character: [^\s] and repeat it one or more times
并且在匹配%22而不是双引号的情况下,您可以执行以下操作:
%22
preg_match_all('/%22(?:\\\\.|(?!%22).)*%22|\S+/', $text, $matches);