9

我需要将多个正则表达式放在一个字符串中,然后将其解析为单独的正则表达式。像下面

regex1<!>regex2<!>regex3

问题是我不确定哪个分隔符最适合用来分隔表达式,而不是<!>示例中所示,以便在解析字符串时可以安全地拆分字符串。

约束是,我不能在多行中制作字符串或使用 xml 或 json 字符串。因为这串表达式应该很容易配置。

期待任何建议。

编辑:

问:为什么它必须是单个字符串?

A:系统有一个配置管理器,可以从属性文件中加载配置。并且属性包含如下行

com.some.package.Class1.Field1: value
com.some.package.Class1.Expressions: exp1<!>exp2<!>exp3

无法在属性文件的多行中写入值。这就是为什么。

4

3 回答 3

2

最好的方法是使用无效的正则表达式作为分隔符,例如**因为如果它在正常的正则表达式中使用它将不起作用并且会抛出异常{NOTE: ++is valid}

regex1+"**"+regex2

现在你可以用这个正则表达式拆分它

(?<!\\\\)[*][*](?![*])
-------         -----
   |              |->to avoid matching pattern like "A*"+"**"+"n+"
   |->check if  * is not escaped

以下是无效正则表达式的列表

  • [+
  • (+
  • [*
  • (*
  • [?
  • *+
  • **(分隔符为(?<!\\\\)[*][*](?![*])
  • ??(分隔符是(?<!\\\\)[?][?](?![?])

拆分时,您需要检查它们是否被转义

(?<!\\\\)delimiter
于 2013-07-02T06:08:18.670 回答
1

最佳分隔符取决于您的要求。但是为了最佳实践,请使用特殊字符的序列,以便这种序列出现的可能性最小,
例如

  • $$**##$$
  • #$% && %$#
于 2013-07-02T06:02:27.940 回答
0

我认为它对你有帮助

首先,您必须用单个特殊字符替换标签内容,然后拆分

   String inputString="regex1<!>regex2<!>regex3";
   String noHTMLString = inputString.replaceAll("\\<.*?>","-");
   String[] splitString1 = (noHTMLString.split("[-]+"));
   for (String string : splitString1) {
   System.out.println(string);  
    }
于 2013-07-02T06:07:39.497 回答