AND/OR运算符如何在正则表达式中表示?

Jon*_*han 209 regex operators

我目前正在编写一个词汇表算法,用于检查用户是否正确输入了该词.我有以下情况:该单词的正确解决方案是"part1,part2".用户应该能够输入"part1"(答案1),"part2"(答案2)或"part1,part2"(答案3).我现在尝试将用户给出的字符串与以下自动创建的正则表达式匹配:

^(part1|part2)$
Run Code Online (Sandbox Code Playgroud)

这只会使答案1和2正确,而答案3则是错误的.我现在想知道是否有类似于|的运算符 这说and/or的不是either...or.

愿任何人帮我解决这个问题吗?

Mit*_*hon 267

我将假设你想动态地构建一个正则表达式,以包含除part1和part2之外的其他单词,并且你想要命令无关紧要.如果是这样,你可以使用这样的东西:

((^|, )(part1|part2|part3))+$
Run Code Online (Sandbox Code Playgroud)

积极匹配:

part1
part2, part1
part1, part2, part3
Run Code Online (Sandbox Code Playgroud)

负面比赛:

part1,           //with and without trailing spaces.
part3, part2, 
otherpart1
Run Code Online (Sandbox Code Playgroud)

  • 请注意,"part1,part"1也是正数.这并不总是令人满意的 (4认同)

Ken*_*ent 25

'^(part1|part2|part1,part2)$'
Run Code Online (Sandbox Code Playgroud)

它有用吗?


Bla*_*ear 9

不是正则表达式专家,但您可以做到^((part1|part2)|(part1, part2))$。用语言来说:“第 1 部分或第 2 部分或两者”


pot*_*ong 5

这是否可以不交替使用?

^((part)1(, \22)?)?(part2)?$
Run Code Online (Sandbox Code Playgroud)

或者为什么不呢?

^((part)1(, (\22))?)?(\4)?$
Run Code Online (Sandbox Code Playgroud)

第一个适用于所有条件,第二个适用于所有条件part2(使用GNU sed 4.1.5)