PHP preg_match_all

时间:2012-01-27 20:16:48

标签: php preg-match-all

我想问一下php的preg_match_all。假设我们有以下示例字符串:

  

这是一个带有 - value1 - 和-_value_2_-的子句,其子条款为 - value.3 - items。

我想用开头的“ - ”和关闭“ - ”字符提取所有字符串。需要的输出应该是:

Array  
(
[0] => Array  
    (
            [0] => -_value1_-  
            [1] => -_value_2_-  
            [2] => -_value.3_-  
        )  
)

4 个答案:

答案 0 :(得分:2)

使用以下简单正则表达式/-.*?-//-.*-/U

之一
  

U(PCRE_UNGREEDY)这个修饰语颠倒了“贪婪”   量词使他们默认不贪心,但变得贪婪   如果紧接着?它与Perl不兼容。它也可以设置   通过图案内的(?U)修改器设置或问号   量词的后面(例如。*?)。

答案 1 :(得分:0)

您可以使用此代码:

$str="This is a clause with -value1- and -_value_2_- having a subclause of -value.3- items.";
if (preg_match_all('/-[^-]*-/', $str, $m))
      print_r($m[0]);

答案 2 :(得分:0)

有时preg_match_all()可能过于复杂。在这些情况下,您可以使用explode来实现此目标。

$matches = explode("-", $input);

explode()做了什么?

$input = "This is a basic example: -JOHN-. The End";

explode()$matches转换为数组。之后,在$input中搜索“ - ”字符。找到“ - ”后,它将设置如下的数组。

$input[0] ---> “这是一个基本的例子:”

$input[1] ---> “JOHN”

$input[2] ---> “。结束”

explode()是一种替代方式。但最好的当然是preg_match_all()

答案 3 :(得分:0)

您可以使用T-Regx library自动添加定界符

pattern('-.*?-')->match($string)->all();

结果是

Array  
(
      [0] => -_value1_-  
      [1] => -_value_2_-  
      [2] => -_value.3_-  
)