我有一个字符串,其中将有[ ] ]的组合[但我需要用[和]替换单个[和],但< and >不要匹配之间的任何内容。
我想我可以用正则表达式来做这件事,但我真的很难让它工作,因为目前的复杂性超出了我的能力。
示例字符串:
[a] [b] <- should replace every [ with < and every ] with > so <a> <b>
[a][b] <- should replace every [ with < and every ] with > so <a><b>
[[abc][a][b]] <- should not replace anything. will always start with [[ and end with ]]
所以从逻辑上考虑,我可以用PHP在循环中完成它,但如果可能的话,我真的想尝试使用preg_replace。
我不确定我是否能在正则表达式中做到这一点。我可以通过使用lookahead/lookbehind来部分地使它工作,但是仍然可以在and 之间匹配[ and ](例如[ [a] ])。
到目前为止
/(?<!(^|)\[)\[[^\]\[\[]*\]/gmi
如果我有a [b] c,则会失败。在这一点上,我不担心替换,我只需要让正则表达式匹配/不匹配。
1条答案
按热度按时间axr492tv1#
你可以用
参见PHP demo和regex demo。
(\[\[(?:(?!\[\[|]]).|(?1))*]])(*SKIP)(*F)
-第1组:[[
,不是[[
或]]
字符序列或整个组1模式的起始点的任何字符的零次或多次出现,然后是]]
,一旦找到匹配,则跳过它,新的搜索从失败位置开始|
-或\[([^][]*)]
- a[
,然后是零个或多个除[
和]
之外的字符被捕获到第2组,然后是一个]
。