找到严格和宽松的RegEx模式

时间:2012-04-10 16:19:08

标签: java regex string string-parsing

我有

^\s*(\w+(\,\w+)*\s*(:|,|\()(\(|\[)?\s*)

在从这两个字符串中提取“命令”时非常有用

**Strict pattern**
command:some text
command: some text
command,command2: some text

**Loose pattern**
command :some text
command( some text )
command, some txt

这是我的问题更清晰的链接。 http://rubular.com/r/epTIiU32Dj

您能否为严格和失败模式编写两个单独的RegExp?

因此,使用一个RegExp,我只得到strict-pattern-commands并使用其他我只是得到lost-pattern-commands。

每当我尝试某些东西时,我最终都会超越对方模式。我无法为每种模式获得有效的RegExp。

1 个答案:

答案 0 :(得分:1)

首先,您可以通过使用字符类而不是组和替换(http://www.rubular.com/r/pI7dk7qzxS)来缩短正则表达式:

^\s*(\w+(,\w+)*\s*[:,(\[]\s*)


这是严格模式(http://www.rubular.com/r/xRIQuAR6TM):

^\s*(\w+(,\w+)*:\s*)


这是松散的模式(http://www.rubular.com/r/9ztWBYsj1a):

^\s*(\w+(,\w+)*(\s+:|\s*[,(\[]\s+)\s*)

请注意,这些适用于您提供的示例数据(正如您在Rubular链接中看到的那样),但很难从样本数据和正则表达式中分辨出是否会覆盖所有潜在的情况,如果有的话是你需要更彻底地解释语法的问题。