3

在java中,我有一个这样的字符串:

"bla bla bla bla [BACK] bla bla bla [bla bla [GO] bla bla bla bla [bla" 

我想用正则表达式找到一条规则,用“(start)”替换开始标签“[”,用“(end)”替换结束标签“]”。

应该忽略“单独的开始标签或结束标签”。

结果是我会得到以下结果:

bla bla bla bla (start)BACK(end) bla bla bla [ bla bla (start)GO(end) bla bla bla bla [bla
4

2 回答 2

5
String resultString = subjectString.replaceAll(
    "(?x)       # Turn on verbose mode                    \n" +
    "\\[        # Match a [                               \n" +
    "(          # Match and capture in group 1:           \n" +
    "[^\\[\\]]* # Any number of characters except brackets\n" +
    ")          # End of capturing group                  \n" +
    "\\]        # Match a ]", "(start)$1(end)");

将仅匹配/替换平衡[/]对,它们之间没有括号。

于 2013-05-14T16:28:15.853 回答
0

在您的示例中,您为什么忽略第一个括号?无论如何,是正则表达式。

js:'bla bla bla bla [BACK] bla bla bla [bla bla [GO] bla bla bla bla [bla'.replace(new RegExp(/\[([^\[\]]+?)\]/g),'(start)$1(end)')

结果:"bla bla bla bla (start)BACK(end) bla bla bla [bla bla (start)GO(end) bla bla bla bla [bla"

于 2013-05-14T16:34:59.030 回答