php正则表达式发现太多
我想打开这个:php正则表达式发现太多,php,regex,preg-replace,regex-negation,Php,Regex,Preg Replace,Regex Negation,我想打开这个:[title->link] 对此: 所以我有这行代码 $content = preg_replace('/\[(.*)\-\>(.*)\]/', '<a target="_blank" href="$2">$1</a>', $content); $content=preg\u replace('/\[(.*)\-\>(.*)\]/',''.$content); 在上,它运行良好,但在我的代码中不起作用。 问题是它将“[”字符计算为普通字符,因为如
[title->link]
对此:
所以我有这行代码
$content = preg_replace('/\[(.*)\-\>(.*)\]/', '<a target="_blank" href="$2">$1</a>', $content);
$content=preg\u replace('/\[(.*)\-\>(.*)\]/',''.$content);
在上,它运行良好,但在我的代码中不起作用。
问题是它将“[”字符计算为普通字符,因为如果第一个(.*),那么第一个组可能会很长,如果前面有另一个“[”
bla bla[…]bla bla[标题->链接]
这里的黑体是我的第一组,但它不是我想要的
如何使第一个组停止,因为第一个“[”是第一个组?您想使用
[^]*
而不是*
,[^]
捕获所有不是]
的内容,这样它在捕获第一个或第二个组时就不会传递]
,从而防止出现问题。这不会保护<代码> [BLLA BL[标题]-Link ]<代码>,包括在第一个捕获组中的“BLA BLA[]”,如果可能发生这种嵌套,请考虑将< <代码> [<代码> ]添加到否定组<代码> [^ ]] /<代码> < /P>
\[([^]]*)->([^]]*)\]
编辑:指出
-
,
和]
不需要在这里转义,但我选择将]
保留为转义,因为它有时在正则表达式中可能有特殊含义。也不需要最后的]
。如果有[
以前。在这种情况下,没有。不过,不要紧,正则表达式引擎通常对太多转义非常友好,如果我不想让它成为特殊的,我会留下一个可能是特殊的,也可能不是特殊的字符总是转义。这只会伤害眼睛。但实际上,这取决于引擎。例如,在Vim默认情况下,\[
是字符类。非转义是文本。字符需要转义或不转义取决于上下文。对于PHP,-
是一个特殊的类,只要前面有一个[
。与]
相同。所以我投票支持\[a \-b\]
或\[a-b]
。两者都是相同的:)但是让我们把这个留给读者来解释。谢谢你的参考资料和漂亮的答案!