2012-01-27 110 views
1

我想问一下关于php的preg_match_all。假设我们有下面的示例字符串:PHP preg_match_all

这是一个条款 - 值1 - 和-_value_2_-有一个小节 - value.3 - 项目。

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

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

而且......你有什么试过的?似乎很简单[正则表达式](http://www.regular-expressions.info/tutorial.html) – Wrikken 2012-01-27 20:19:50

+0

我试过的正则表达式是“/-_.*._-/”,但它返回错误的结果..不是这样正则表达式模式:( – 2012-01-27 20:22:03

+1

/(-.*?-)/或者/(-.*-)/U或者没有(和) – Cheery 2012-01-27 20:23:55

回答

2

使用下面这个简单的正则表达式/-.*?-//-.*-/U

U(PCRE_UNGREEDY)这个修饰符反转的 量词的“贪婪”的一个,使他们不被贪婪默认,但如果后面跟?变成贪婪 。它与Perl不兼容。它也可以通过模式内的(?U)修饰符设置或者在量词后面的问号 来设置 (例如,*?)。

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]); 
+0

谢谢,它给我需要相同的结果 – 2012-01-27 20:37:27

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()