使用php中的regex多次查找字符之间的字符串值


Using regex in php to find string values between characters multiple times

这里有一个字符串"Hello World! I am trying out regex in PHP!"。我想做的是检索一组字符之间的字符串值。在本例中,字符为** **

$str = "**Hello World!** I am trying out regex in PHP!";
preg_match('#'*'*(.*)'*'*#Us', $str, $match);
echo $match[1];

这将呼应"Hello World!",但我想呼应几个匹配:

$str = "**Hello World!** I am trying out **regex in PHP!**";

我怎么能这么做?我试过使用preg_match_all(),但我认为我没有正确使用它,或者在这种情况下它根本不会起作用。

您可以使用:

$str = "**Hello World!** I am trying out **regex in PHP!**";
preg_match_all('/'*{2}([^*]*)'*{2}/', $str, $m);
print_r($m[1]);
Array
(
    [0] => Hello World!
    [1] => regex in PHP!
)

即使是您的正则表达式#'*'*(.*)'*'*#Us也应该使用它,但由于基于否定的模式[^*]*

,我建议的正则表达式效率稍高

由于使用了preg_match,您得到了1个匹配。您应该使用preg_match_all。这是另一种模式。它在分隔符之间使用单词非单词匹配

<?php
    $str = "**Hello World!** I am trying out **regex in PHP!**";
    $regex='/'*'*(['w'W]*)'*'*/iU';
    preg_match_all($regex, $str, $m); 
    print_r($m[1]);

我建议您使用非贪婪形式的正则表达式。因为我认为您还想匹配单个*所在的内容(**内的文本)。

$str = "**Hello World!** I am trying out **regex in PHP!**";
preg_match_all('~'*'*(.*?)'*'*~', $str, $matches);
print_r($matches[1]);

演示