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

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

^(part1|part2)$

这只返回正确的答案1和2,而答案3将是错误的。我现在想知道是否有一个类似于|的操作符,它说and/or而不是either...or

谁能帮我解决这个问题?

872124 次浏览

不是正则表达式的专家,但你可以做^((part1|part2)|(part1, part2))$。换言之:“第一部分或第二部分,或两者都有”

'^(part1|part2|part1,part2)$'

这有用吗?

或者你可以用这个:

^(?:part[12]|(part)1,\12)$

我假设您想动态地构建一个正则表达式来包含part1和part2以外的单词,并且您希望顺序无关紧要。如果是这样,你可以使用这样的东西:

((^|, )(part1|part2|part3))+$

积极的比赛:

part1
part2, part1
part1, part2, part3

消极比赛:

part1,           //with and without trailing spaces.
part3, part2,
otherpart1

这种方法没有交替就能奏效吗?

^((part)1(, \22)?)?(part2)?$

或者为什么不是这个?

^((part)1(, (\22))?)?(\4)?$

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

使用
如果在vim中:

:s/{\|}/"/g

将取代{and}上的" 所以{lol}变成"lol"