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

Posted

技术标签:

【中文标题】分隔多个正则表达式的最佳分隔符【英文标题】: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 中有一些小错误。请查看编辑 【参考方案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】:

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

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

【讨论】:

以上是关于分隔多个正则表达式的最佳分隔符的主要内容,如果未能解决你的问题,请参考以下文章

使用正则表达式匹配多个逗号分隔的单词

正则表达式逗号分隔分隔符

C# 正则表达式匹配具有分隔符的字符串

大佬们 用js正则验证多个IP用回车分隔该怎么写?

在逗号分隔的字母数字正则表达式中添加空格

使用正则表达式将字段拆分为数组的 Bash 脚本用于多字符分隔符