首页 >后端开发 >php教程 >使用PHP的explode()时如何将引用的文本保留为单个单词?

使用PHP的explode()时如何将引用的文本保留为单个单词?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-07 13:01:12489浏览

How to Preserve Quoted Text as Single Words When Using PHP's explode()?

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn