【问题标题】:regex java: how to replace a string in a generic between the start tag and end tag of a genericregex java:如何在泛型的开始标记和结束标记之间替换泛型中的字符串
【发布时间】:2013-05-09 00:43:02
【问题描述】:

在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

【问题讨论】:

  • 是否有任何规则说明开始和结束标签之间究竟允许什么(除了括号显然不允许在那里)?

标签: java regex tags


【解决方案1】:
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)");

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

【讨论】:

    【解决方案2】:

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

    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"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-11
      • 1970-01-01
      • 1970-01-01
      • 2016-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-11
      相关资源
      最近更新 更多