使用嵌入引号分解字符串
在处理引号内的文本时,使用标准explode() 函数分解字符串可能会出现问题。为了达到将引用的单词视为单个实体的预期结果,需要更复杂的方法。
使用正则表达式
正则表达式为此任务提供了强大的解决方案。以下正则表达式匹配带引号的字符串,允许转义引号:
"(?:\.|[^\"])*"|\S+
此模式可与 preg_match_all() 一起使用,从字符串中提取带引号和不带引号的单词:
$text = 'Lorem ipsum "dolor sit amet" consectetur "adipiscing \"elit" dolor'; preg_match_all('/"(?:\.|[^\"])*"|\S+/', $text, $matches);
结果数组将包含所需的输出:
Array ( [0] => Array ( [0] => Lorem [1] => ipsum [2] => "dolor sit amet" [3] => consectetur [4] => "adipiscing \"elit" [5] => dolor ) )
解释
正则表达式模式由两部分组成:
非捕获组 (?:...) 确保转义引号不会被捕获为单独的匹配项。
处理百分比编码引号
如果您的字符串包含百分比编码的引号而不是双引号,请将正则表达式修改为:
%22(?:\.|(?!%22).)*%22|\S+
以上是如何分解带有嵌入引号(包括转义引号和百分比编码引号)的字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!