Regex 组合正则表达式匹配

Regex 组合正则表达式匹配,regex,perl,Regex,Perl,是否有可能将这5个正则表达式组合为一个或至少部分正则表达式 /[ ,][ABCabc][:]\d+/g /[ ,][ABCabc][ ]?[=][ ]?\d+/g /^[ABCabc][:]\d+/g /^[ABCabc][ ]?[=][ ]?\d+/g /[\\][\w][ABCabc][ ]?[=][ ]?\d+/g 提示、纠正和改进也会很好。首先,减少它们: /[,][a-c]:\d+/gi /[,][a-c]?=?\d+/gi /^[a-c]:\d+/gi /^[a-c]?=?\d+/

是否有可能将这5个正则表达式组合为一个或至少部分正则表达式

/[ ,][ABCabc][:]\d+/g
/[ ,][ABCabc][ ]?[=][ ]?\d+/g
/^[ABCabc][:]\d+/g
/^[ABCabc][ ]?[=][ ]?\d+/g
/[\\][\w][ABCabc][ ]?[=][ ]?\d+/g

提示、纠正和改进也会很好。

首先,减少它们:

/[,][a-c]:\d+/gi /[,][a-c]?=?\d+/gi /^[a-c]:\d+/gi /^[a-c]?=?\d+/gi /\\\w[a-c]?=?\d+/gi 现在,通过组合它们,你的意思是你在测试与任何一个,而不是全部,匹配,对吗?因此,第2步:

/[,][a-c]:|?=?\d+/gi /^[a-c]:\d+/gi /^[a-c]?=?\d+/gi /\\\w[a-c]?=?\d+/gi 步骤3:

/[,][a-c]:|?=?\d+/gi /^[a-c]:|?=?\d+/gi /\\\w[a-c]?=?\d+/gi 步骤4:

/^||,[a-c]:|?=?\d+/gi /\\\w[a-c]?=?\d+/gi 步骤5:

/^||,[a-c]:|?=?\w[a-c]?=?\d+/gi 瞧。您可以在步骤5中使用捕获,但我不会使事情复杂化


如果可以,请坚持执行步骤4的结果。步骤5使正则表达式变得冗长而混乱。

首先,减少它们:

/[,][a-c]:\d+/gi /[,][a-c]?=?\d+/gi /^[a-c]:\d+/gi /^[a-c]?=?\d+/gi /\\\w[a-c]?=?\d+/gi 现在,通过组合它们,你的意思是你在测试与任何一个,而不是全部,匹配,对吗?因此,第2步:

/[,][a-c]:|?=?\d+/gi /^[a-c]:\d+/gi /^[a-c]?=?\d+/gi /\\\w[a-c]?=?\d+/gi 步骤3:

/[,][a-c]:|?=?\d+/gi /^[a-c]:|?=?\d+/gi /\\\w[a-c]?=?\d+/gi 步骤4:

/^||,[a-c]:|?=?\d+/gi /\\\w[a-c]?=?\d+/gi 步骤5:

/^||,[a-c]:|?=?\w[a-c]?=?\d+/gi 瞧。您可以在步骤5中使用捕获,但我不会使事情复杂化


如果可以,请坚持执行步骤4的结果。第5步使正则表达式变得冗长而混乱。

您总是可以将正则表达式组合成一个,只需使用regex1 | regex2 | regex3。。。如果这就是你所说的合为一体


问题是你是否应该,当然?正则表达式通常很难阅读,任何你能做的使它们更容易理解和在将来修改的事情都是值得鼓励的。

你总是可以将正则表达式组合成一个正则表达式,只需使用正则表达式1 |正则表达式2 |正则表达式3。。。如果这就是你所说的合为一体


问题是你是否应该,当然?正则表达式通常很难阅读,我们鼓励您尽一切努力让它们更容易理解,并在将来进行修改。

如果您所说的组合是指正则表达式测试,以便在任何模式匹配的情况下获得匹配,是的:

(?:
    (?:/[ ,][ABCabc][:]\d+)|
    (?:/[ ,][ABCabc][ ]?[=][ ]?\d+)|
    (?:/^[ABCabc][:]\d+)|
    (?:/^[ABCabc][ ]?[=][ ]?\d+)|
    (?:/[\\][\w][ABCabc][ ]?[=][ ]?\d+)
)/g

如果“组合”指的是正则表达式测试,因此如果任何模式匹配,则得到匹配,是:

(?:
    (?:/[ ,][ABCabc][:]\d+)|
    (?:/[ ,][ABCabc][ ]?[=][ ]?\d+)|
    (?:/^[ABCabc][:]\d+)|
    (?:/^[ABCabc][ ]?[=][ ]?\d+)|
    (?:/[\\][\w][ABCabc][ ]?[=][ ]?\d+)
)/g


您可能想看看Regexp::assembly

您可能想看看Regexp::assembly

对它们所做的事情的解释会很有帮助……您是指这5项中的任何一项还是这5项中的所有内容?也就是说,/p1/| | |/p2/| | |/p3/| | |/p4/| | |/p5/或/p1/&&&&/p2/&&/p3/&&/p4/&/p5/?或者其他什么?对他们所做的解释会很有帮助……你是指这5项中的任何一项,还是指所有这5项?也就是说,/p1/| | |/p2/| | |/p3/| | |/p4/| | |/p5/或/p1/&&&&/p2/&&/p3/&&/p4/&/p5/?或者其他什么?你甚至可以用非捕获组替换组,以与原始表达式保持一致,当然更快。非常感谢,我已经理解了所有内容,但它并不像我预期的那样工作,我在数组push:push@match,/[,][$char$char2][:]\d+/g;,中使用了这些正则表达式,现在它只在匹配数组中给我:==:像那样。@David:是的,这是组合它们的副作用。如果您使用这样的匹配,您可以使用邪恶的Greebo的解决方案,或者您可以调整用于执行此操作的数组索引。@minitech:您能解释为什么它不起作用吗?我已经尝试过邪恶的格里波的解决方案,它也不起作用了?@David:好吧,我现在有点困惑-你在使用比赛结果吗?在数组@match?中,您甚至可以将组替换为非捕获组,以与原始表达式保持一致,当然更快。非常感谢,我已经理解了所有内容,但它并不像我预期的那样工作,我在数组push:push@match,/[,][$char$char2][:]\d+/g;,中使用了这些正则表达式,现在它只在匹配数组中给我:==:像那样。@David:是的,这是组合它们的副作用。如果您使用这样的匹配,您可以使用邪恶的Greebo的解决方案,或者您可以调整用于执行此操作的数组索引。@minitech:您能解释为什么它不起作用吗?我已经尝试过邪恶的格里波的解决方案,它也不起作用了?@David:好吧,我现在有点困惑-你在使用比赛结果吗?在数组中@match?是的,caramba!我甚至不知道从哪里开始。只是,没有。这是一个多么建设性的回应。@Alan Moore:嘿,这很有效,很清楚,但可能更有效。是的,这有点粗鲁;很抱歉但答案是错误的。按照您的方式,就好像/和/g是您试图匹配的文本的一部分,我可以合理地确定斜杠是作为正则表达式分隔符的,而g是全局修饰符。要按您尝试的方式组合正则表达式,结果应该如下所示:/?:regex1|
?:regex2 |?:regex3 |?:regex4 |?:regex5/g。是的,你说得对-我刚刚做了一个非常快速的连接。至少修复了这么多。啊,卡兰巴!我甚至不知道从哪里开始。只是,没有。这是一个多么建设性的回应。@Alan Moore:嘿,这很有效,很清楚,但可能更有效。是的,这有点粗鲁;很抱歉但答案是错误的。按照您的方式,就好像/和/g是您试图匹配的文本的一部分,我可以合理地确定斜杠是作为正则表达式分隔符的,而g是全局修饰符。要以您尝试的方式组合正则表达式,结果应该如下所示:/?:regex1 |?:regex2 |?:regex3 |?:regex4 |?:regex5/g。是的,您是对的-我刚刚做了一个真正快速的连接。至少修复了这么多。