2011-04-12 126 views
2

我有以下字符串:PHP正则表达式preg_match_all字符串

关键字|标题| HTTP://example.com/

我想用PHP函数

preg_match_all ($anchor, $key, $matches, PREG_SET_ORDER)) 

当前

$anchor='/([\w\W]*?)\|([\w\W]*)/'; 

我得到$ matches数组:

Array 
(
    [0] => Array 
     (
      [0] => keyword|title|http://example.com/ 
      [1] => keyword 
      [2] => title|http://example.com/ 
     ) 

) 

我想获得

matches[1]=keyword 
matches[2]=title 
matches[3]=http://example.com 

我会如何修改$锚实现这一目标?

+0

你只需要在你的正则表达式中增加一个'\ |([\ w \ W] *?)''。 – mario 2011-04-12 21:12:33

+0

谢谢,这工作。最终表达式:$ anchor ='/([\ w \ W] *?)\ |([\ w \ W] *?)\ |([\ w \ W] *)/'; – IberoMedia 2011-04-12 21:52:14

回答

1

如果你想使用正则表达式,以避免手动循环来保持,那么我建议这在使用[\w\W]*语法和可读性:

$anchor = '/([^|]*) \| ([^|]*) \| ([^\s|]+)/x'; 

这是有明确否定的字符类稍有更稳健。 (我假设在这里既没有标题也没有url可以包含|)。

+0

嘿马里奥,谢谢你,这工作。我对正则表达式一无所知。他们对我来说看起来像是胡言乱语。我在哪里可以找到这些表达式的规则和机制?谢谢 – IberoMedia 2011-04-14 21:49:22

+0

是的。他们是一种自己的编程语言。习惯它们需要时间。 http://regular-expressions.info/提供了一个很容易理解的介绍。下面是一些有时可以帮助构建正则表达式的工具:http://stackoverflow.com/questions/89718/is-there-anything-like-regexbuddy-in-the-open-source-world – mario 2011-04-14 21:59:57

6

最简单的方法是使用explode(),而不是正则表达式:

$parts = explode('|', $str); 

部分的假设没有一个可以包含|。但是,如果他们可以,正则表达式也不会帮助你。

+0

绝对如此。只是为了它...继承人正则表达式会工作:'/([^ |] +)/' – 2011-04-12 21:08:10

+0

加里,这是匹配,如果我使用这个正则表达式:

Array ( [0] => Array ( [0] => keyword [1] => keyword ) [1] => Array ( [0] => title [1] => title ) [2] => Array ( [0] => http://example.com/ [1] => http://example.com/ ) ) 
IberoMedia 2011-04-12 21:42:02