【问题标题】:Best delimiter to separate multipe regex分隔多个正则表达式的最佳分隔符
【发布时间】:2013-06-29 09:27:34
【问题描述】:

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

regex1<!>regex2<!>regex3

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

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

期待任何建议。

已编辑:

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

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

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

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

【问题讨论】:

  • 为什么必须是单个字符串?
  • 更新了您问题的答案
  • +1 个有趣的问题
  • @Samiron ans 中有一些小错误。请查看编辑

标签: java regex parsing delimiter


【解决方案1】:

最好的方法是使用 invalid 正则表达式作为分隔符,例如 ** 因为如果在普通正则表达式中使用它将不起作用并且会引发异常{NOTE:++有效}

regex1+"**"+regex2

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

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

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

  • [+
  • (+
  • [*
  • (*
  • [?
  • *+
  • **(分隔符为(?&lt;!\\\\)[*][*](?![*])
  • ??(分隔符为(?&lt;!\\\\)[?][?](?![?])

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

(?<!\\\\)delimiter

【讨论】:

  • 它不适用于 regex1 = [\d]* 和 regex2 =[-]+ (or any regex) ,所以它会形成如下形式: [\d]***[- ]+,拆分会产生 [\d] 和 *[-]+
【解决方案2】:

我认为它对你有帮助

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

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

【讨论】:

  • 啊.. &lt;!&gt; 不是我决定使用的东西。我需要一个建议来替换它
【解决方案3】:

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

  • $$**##$$
  • #$%&&%$#

【讨论】:

    猜你喜欢
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多