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

时间:2011-11-05 14:37:18

标签: regex operators

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

^(part1|part2)$

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

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

6 个答案:

答案 0 :(得分:236)

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

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

肯定匹配:

part1
part2, part1
part1, part2, part3

否定匹配:

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

答案 1 :(得分:23)

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

有效吗?

答案 2 :(得分:5)

这是否可以不交替使用?

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

或者为什么不呢?

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

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

答案 3 :(得分:3)

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

答案 4 :(得分:2)

或者你可以使用它:

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

答案 5 :(得分:1)

使用
如果在vim中:

:s/{\|}/"/g

将替换“上的{和} 所以{lol}变成“ lol”