RegEX匹配方括号外的所有内容

我正在玩WP编辑器,我想创建一个RegEX模式,匹配方括号外的所有内容,如下所示:

[foo]Some selected text here[/foo]More selected text here

并替换为

[foo][text_box text="Some selected text here"][/textbox][/foo]
[text_box text="More selected text here"][/textbox]

我设法使用方括号内容匹配

(\[(.*?)\])

我怎样才能匹配其他一切?

非常感谢您的帮助!

最佳答案 你的文字可以包含[?

如果没有,你可以用精神的东西

((?:\s*\[[^\]]+\])*)([^[]+)((?:\[[^\]]+\]\s*)*)

(                    # first capturing group
    (?:              # non capturing group
        \s*          # might be whitespaces
        \[           # opening [
        [^\]]+       # anything except a closing ]
        \]           # closing ]
    )*               # zero or more times
)
([^[]+)              # store in second capturing group any string that doesn't contain a [
((?:\[[^\]]+\]\s*)*) # catch tags in capture group 3

并替换它

$1[text_box text="$2"][/textbox]$3

想法是捕获不包含[.当我们停止时,我们知道下一个字符是[,所以这是一个标签,所以我们捕获每个连续的[…]标签.之后又是文本,所以我们重新应用模式.

如果字符串以标签开头,则文本前的“标签捕获”将仅使用一次.

demo here

点赞