需要一个正则表达式来匹配三个字符串

时间:2008-10-03 13:56:52

标签: regex

我一般都远离regular expressions,因为我很少找到它们。但在这种情况下,我认为我没有选择。

我需要一个正则表达式来处理以下情况。我将看三个字符串。如果第一个字符为1-9 or the letters o,n,d (lower or upper)且第二个字符为1,2 or 3且第三个字符为0-9,则匹配为。

有人可以帮帮我吗?

6 个答案:

答案 0 :(得分:9)

其他一些答案略有不同。将输入限制为完全匹配的文本。


^[1-9ondOND][123][0-9]$

答案 1 :(得分:5)

[1-9ondOND][123][0-9]

我省略了^$(字符串标记的开头和结尾),因为你说你有三个字符的字符串,但包含它们没有坏处,它们可能会提高速度并不是说在这么短的投入上这将是一件大事。

当然,这假设您使用的语言和语言环境中大写等值的ondO,{{1 }和N。如果没有,你需要告诉你的正则表达式解释器忽略大小写。该机制因语言/框架而异。

对于python,你可以使用类似的东西:

D

re.match('[1-9ond][123][0-9]', inputstring, re.IGNORECASE) 强制在字符串的开头匹配,因此在任何情况下都不需要re.match

答案 2 :(得分:2)

Perl / ^ [1-9ondOND] [1-3] [0-9] $ /

^ =在字符串的开头,$ =字符串的结尾

答案 3 :(得分:2)

答案 4 :(得分:0)

答案非常晚,但希望这会有所帮助

([1-9]|(?i)(o|n|d))[123][\d]

http://regex101.com/r/vE2jT1/1

答案 5 :(得分:-2)

在基于PREG的系统中(目前大部分都是这样):

^(?:[1-9]|[ond])[1-3][0-9]$

有些系统需要开始/结束标记(PHP,Perl,但不是.NET),如果有的话,它最终会像:

/^(?:[1-9]|[ond])[1-3][0-9]$/