【发布时间】:2014-04-03 09:11:44
【问题描述】:
我正在尝试制作两个彼此专有的正则表达式模式,用于 Java。
正则表达式一:
匹配[[ 和]] 之间的任何内容,除了|(管道)字符或\r\n 换行符,捕获完整匹配并且仅将[[ 和]] 之间的文本分为第1 组和2分别:
正则表达式:(\[\[([^|\r\n]*?)]])
应该返回 2 个完整的匹配项,输入如下:
[[wikipage&sfd/weird-]]
[[The whitespace.con_vention/+-test]]
正则表达式二:
匹配[[ 和]] 之间的所有内容,|(管道)字符或\r\n 换行符除外,将完整匹配项和仅| 之前的文本分别捕获到第 1 组和第 2 组:
正则表达式:(\[\[([^|\r\n]*?)\|.*?]])
应该返回 2 个完整的匹配项,输入如下:
[[SandBox|the sandbox]]
[[SandBox|the.sandbox_/=test]]
但输入如下:
Test [[wiki:1]], [[wiki:page]test|test ]one]], [[wiki:1|page one]]
正则表达式二的第一个完整匹配是:
[[wiki:1]], [[wiki:page]test|test ]one]]
regex two的第二个完整匹配是:
[[wiki:1|page one]]
虽然我预计只有两场这样的完整比赛:
[[wiki:page]test|test ]one]]
[[wiki:1|page one]]
我已经尝试过像这样的负前瞻:(\[\[([^|\r\n]*?)(?!]])\|.*?]]),但如果它找到]],它只会回溯并重用正则表达式的第一部分。
所以我的问题是:
如果在| 之前找到]],我该如何跳过/取消整个正则表达式?
【问题讨论】:
-
ticket来自哪里?你把它和wiki混在一起了吗?还要澄清一下,“First Full Match”是第一个正则表达式的结果,“Second FF”是第二个正则表达式的结果? -
给出输入和预期的输出。谢谢
-
是的,我把一些例子弄混了,现在修复了
-
您的符号非常混乱。根本不清楚输入和输出是什么。您说匹配是“[[wiki:1]]”,但在上面的示例中,该字符串甚至没有出现。有点不对劲。请更清楚。输入、正则表达式、预期匹配、实际匹配。
-
@bertuslakkis:更清楚了,谢谢。