在 PHPexplode 中将引用的单词视为单个单词
我们如何使用explode()分解字符串,如下所示将引用的文本保留为单个单词?
Lorem ipsum "dolor sit amet" consectetur "adipiscing elit" dolor
预期输出:
["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():
$text = 'Lorem ipsum "dolor sit amet" consectetur "adipiscing \"elit" dolor'; preg_match_all('/"(?:\\.|[^\\"])*"|\S+/', $text, $matches); print_r($matches);
这种精炼的语法甚至可以处理带引号的短语中的转义引号。
正则表达式细分:
"(?: # Start non-capture group 1 \ # Match backslash character . # Match any character except line breaks | # Or [^\"] # Match any character except backslash and double quotes )* # End non-capture group 1 and repeat it zero or more times " # Match double quotes | # Or \S+ # Match one or more non-whitespace characters
处理“而不是 Double引号:
如果需要处理 " 代替双引号,请使用此调整后的正则表达式:
preg_match_all('/%22(?:\\.|(?!%22).)*%22|\S+/', $text, $matches);
以上是使用PHP的explode()时如何将引用的文本保留为单个单词?的详细内容。更多信息请关注PHP中文网其他相关文章!