正则表达式匹配''php之间的短语

时间:2019-10-07 11:18:25

标签: php regex

我想匹配''(单引号)内的内容。例如:'for example'应该返回forexample。这只是我要分析的句子的一部分,我在整个句子中使用了preg_split(\s),因此'for example'将变成'for and example'

现在我尝试了/^'(.*)|(.*)'$/,它只返回for,而不是example,如果我像/^(.*)'|'(.*)$/这样说,它只会返回{{1} },而不是example。我该如何解决?

2 个答案:

答案 0 :(得分:1)

要获取单句(然后要拆分),可以使用preg_match_all()来捕获两个单引号之间的所有内容。

preg_match_all("~'([^']+)'~", $text, $matches)
$string = $matches[1];

$string现在包含诸如“带单词的示例字符串”之类的内容。 现在,如果要根据特定的序列/字符分割字符串,可以使用explode()

$string = "example string with words";
$result = explode(" ", $string);
print_r($result);

给您

Array
(
    [0] => example
    [1] => string
    [2] => with
    [3] => words
)

答案 1 :(得分:1)

您可以通过利用\G元字符继续匹配单引号内不限数量的以空格分隔的字符串来避免对字符串进行双重处理。

代码:(PHP Demo)(Regex Demo

$string = "text 'for an example of the \"continue\" metacharacter' text";

var_export(preg_match_all("~(?|'|\G(?!^) )\K[^ ']+~", $string, $out) ? $out[0] : []);

输出:

array (
  0 => 'for',
  1 => 'an',
  2 => 'example',
  3 => 'of',
  4 => 'the',
  5 => '"continue"',
  6 => 'metacharacter',
)