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

^(part1|part2)$

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

谁能帮我解决这个问题?


当前回答

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

其他回答

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

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

积极的比赛:

part1
part2, part1
part1, part2, part3

消极比赛:

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

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

或者你可以用这个:

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

这有用吗?

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

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

或者为什么不是这个?

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

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