【问题标题】:Regex concat with "AND" opeartor [duplicate]带有“AND”运算符的正则表达式连接[重复]
【发布时间】:2026-01-01 12:20:05
【问题描述】:

我想用 AND 运算符连接两个正则表达式(我不知道这是否可能......)所以匹配只发生在字符串匹配 RegEx1 和 RegEx2 时。

 RegEx1: [a-g]+
 RegEx2: [b-z]+
 Example1 : String "bcd" match 
 Example2 : String "hijk" not match 

使用 OR 运算符很容易,但对于 AND 我找不到解决方案。

【问题讨论】:

  • 您使用什么语言/工具?您的正则表达式风格是否接受前瞻?

标签: regex regex-group


【解决方案1】:

使用正向前瞻结合“字符串开头和结尾”锚点来确保匹配整个字符串并且不存在“非法”字母:

^(?=[a-g]+$)(?=[b-z]+$).*

https://regex101.com/r/Bz7qnb/2/

【讨论】:

    【解决方案2】:

    您可以使用正向前瞻运算符(?=) 来组合表达式:

    (?=[a-g]+)(?=[b-z]+)
    

    这是一个测试它的小提琴:https://regex101.com/r/kyy6XZ/1

    在这种情况下,它在逻辑上等同于[b-g]+,这意味着它应该匹配在bg 区间内包含一个或多个字母的任何字符串,包括边界。

    【讨论】:

    • 这是匹配 bijk 但我不认为它应该。
    • b 介于ag 之间以及bz 之间,所以是的,它匹配两个表达式,它们的间隔中至少需要一个字母,不是吗?
    • @AdrienBrunelat 我认为 OP 希望将其锚定,例如:\b(?=[a-g]+\b)(?=[b-z]+\b)[a-z]+\b
    • @AdrienBrunelat 它与bijk 与我上面使用单词边界的模式不匹配:请参阅here