如何修复此 wiki 链接解析正则表达式?
我有一个旧的 wiki,我正在将其转换为使用 Markdown 和 [[]]
wiki 链接格式的新 wiki。不幸的是,旧的维基确实很旧,并且有很多生成链接的方式,包括。 CamelCase、单括号 ([]
) wiki 链接等。
我正在 sed
中转换正则表达式,并使用以下正则表达式将独立的 CamelCase 链接转换为双括号 ([[]]
) wiki 链接:
s/([^[|])([A-Z][a-z]+[A-Z][A-Za-z]+)([^]|])/\1\[\[\2\]\]\3/g
不幸的是,上述的一个问题(在我尝试不转换现有单括号维基链接中的驼峰命名法,因为两者混合的情况下)是像 [BluetoothConnection|UsingBluetoothIndex]
这样的东西会被转换到[BluetoothConnection|使用[[BluetoothInde]]x]
。
我怎样才能解决这个问题并迫使比赛变得更加贪婪,从而失败并且在这种情况下不进行替换?如果 sed
的增强正则表达式过于有限,我愿意通过 perl
而不是 sed
。
I've got an old wiki that I'm converting to a new wiki which uses Markdown and [[]]
wiki link format. Unfortunately, the old wiki is really old and had many ways of producing links, incl. CamelCase, single-bracket ([]
) wiki links, among others.
I'm converting w/regular expressions in sed
and use the following regular expression to convert stand-alone CamelCase links to double-bracket ([[]]
) wiki links:
s/([^[|])([A-Z][a-z]+[A-Z][A-Za-z]+)([^]|])/\1\[\[\2\]\]\3/g
Unfortunately, the one problem with the above (in my attempt to not convert CamelCase in existing single-bracket wiki links, since there's a mix of both) is that something like [BluetoothConnection|UsingBluetoothIndex]
will get converted to [BluetoothConnection|Using[[BluetoothInde]]x]
.
How can I resolve this issue and force the match to be more greedy and therefore fail and not make a substitution in that case? If sed
's enhanced regular expressions turn out to be too limiting, I'm willing to pass through perl
instead of sed
.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
好吧,你可以试试这个:
更新:
好吧,我相信现在我已经使用 perl 的否定查找指令。所以这里是:
它所做的就是检查文本是否不是以“|”开头或 '[' 并且不以
|
或]
结尾,然后将其括在[[
和]]
中。Alright can you try this:
Update:
Alright I believe now I have regex for your problem using perl's negative look behind directive. So here it is:
All it is doing is checking if text is not starting with '|' or '[' and NOT ending with
|
or]
then enclose it in[[
and]]
.