分隔多个正则表达式的最佳分隔符

时间:2013-07-02 05:58:31

标签: java regex parsing delimiter

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

regex1<!>regex2<!>regex3

问题是我不确定哪个分隔符最好用于分隔表达式代替示例中显示的<!>,以便我可以在解析它时安全地分割字符串。

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

期待任何建议。

编辑:

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

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

之类的行
com.some.package.Class1.Field1: value
com.some.package.Class1.Expressions: exp1<!>exp2<!>exp3

无法在属性文件中的多行中写入值。这就是原因。

3 个答案:

答案 0 :(得分:2)

最好的方法是使用无效正则表达式作为分隔符,例如**因为如果它在普通的正则表达式中使用它将无效并且会抛出异常{注意:{ {1}}有效}

++

现在您可以使用此正则表达式将其拆分

regex1+"**"+regex2

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

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

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

(?<!\\\\)[?][?](?![?])

答案 1 :(得分:1)

最佳分隔符取决于您的要求。但是为了最佳实践,请使用特殊字符的间隔,以便最大限度地减少这种干扰的可能性 像

  • $$ ** ## $$
  • #$%的&安培;&安培; %$#

答案 2 :(得分:0)

我觉得它对你有用的东西

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

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