字符串的PHP正则表达式preg_match_all

字符串的PHP正则表达式preg_match_all,php,regex,Php,Regex,我有以下字符串: 关键字|标题|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.

我有以下字符串:

关键字|标题|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

如何修改$anchor以实现此目的?

最简单的方法是使用正则表达式代替:

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

假设所有零件都不能包含
|
。但是如果可以的话,regex也不会对您有多大帮助。

如果您想继续使用regex来避免手动循环,那么我建议您使用它,而不是使用
[\w\w]*
语法,并且为了可读性:

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

使用显式的否定字符类会更健壮一些。(我假设标题和url都不能包含
|

绝对可以。只是为了它。。。这里有一个可以工作的正则表达式:
/([^ |]+)/
Gary,如果我使用这个正则表达式,这是匹配的:数组([0]=>Array([0]=>keyword[1]=>keyword)[1]=>Array([0]=>title[1]=>title)[2]=>Array([0]=>1]=>))您只需在正则表达式中再添加一个
\\124;([\ w\w]*?)
。谢谢,这很有效。最后一个表达式:$anchor='/([\w\w]*?)\\\\\\;([\w\w]*?)\\\\\\\\\;([\w\w]*)/;嘿,马里奥,谢谢你,这起作用了。我对正则表达式一无所知;在我看来,他们像是胡言乱语。我在哪里可以找到这些表达式的规则和机制?谢谢,是的。它们有点像是自己的编程语言。习惯它们需要时间。提供了一个基本可以理解的介绍。下面是一些有时可以帮助构造正则表达式的工具: