【发布时间】:2018-01-10 05:34:06
【问题描述】:
我正在尝试创建一个正则表达式模式,它将匹配以 @ 开头的字符串中的单词
解决这个初始问题的正则表达式是'~(@\w+)~'
代码的第二个要求是它还必须忽略出现在 [quote] 和 [/quote] 标记中的任何匹配项
失败的几个尝试是:
(?:[0-9]+|~(@\w+)~)(?![0-9a-z]*\[\/[a-z]+\])
/[quote[\s\]][\s\S]*?\/quote](*SKIP)(*F)|~(@\w+)~/i
示例:以下字符串应具有显示的数组输出:
$results = [];
$string = "@friends @john [quote]@and @jane[/quote] @doe";
//run regex match
preg_match_all('regex', $string, $results);
//dump results
var_dump($results[1]);
//results: array consisting of:
[1]=>"@friends"
[2]=>"@john"
[3]=>"@doe
【问题讨论】:
-
我认为从字符串中删除
\[quote\].+?\[\/quote\]然后通过第一个正则表达式查找很简单