为什么preg_match("/ [^(22 | 75)] /","25")返回false?

Syc*_*ych -1 php regex

我想测试给定的字符串不属于以下字符串组:22 75.

任何人都可以告诉为什么PHP的preg_match("/[^(22|75)]/", "25")回报为0

最奇怪的是,按预期preg_match("/[^(22|76)]/", "25")返回1 ...

编辑:我想我理解我的错误的原因和性质,而不是如何检查给定的两位数字不匹配20,21,22,23,24,75,76,77,78,79 ,80?我需要组合一个表达式来检查给定年龄与允许年龄列表(这假设只有两位数字)

我不能使用除preg_match()(!preg_match()在我的情况下不可用)以外的任何东西,我只能使用RegEx模式.

Vas*_*kis 6

正则表达式课程的时间!


正则表达式的说明

[^(22|75)]

匹配为false,因为它正在寻找以下内容:

  • 不在此字符列表中的单个字符: |()275

[^(22|76)]

匹配true,因为它正在寻找:

  • 不在此字符列表中的单个字符: |()276

为什么这样做?

你把你的正则表达式包装在一个字符类中(点击了解更多信息)

举一个字符类如何工作的例子,看看这个正则表达式:

[2222222222222221111111199999999999]

这个字符类将只匹配一个字符,如果它是一个2,1或者一个9.

如何让它适合你:

要匹配数字25(或22,52和55),您可以使用此字符类:

[25]{2}

这将匹配包含任一地点25任何地点的2位数字.