我在编写正则表达式时遇到问题。我怎么写以下内容:
如果信息有效,则显示提示“谢谢”。否则“输入的信息不正确。”
我写了以下内容,但它无法正常工作:
reg=/^(\d{1,5})?/s ([a-z]{3,5}\b\d{3,5}\s) \s\1 $/;
我将不胜感激。
答案 0 :(得分:4)
好的,按照你的指示写信(我不相信你真正想要的)你可以使用:
/^[1-5]?\s[a-z]{3,5}\d{3,5}\s+(\d{4})\s+(\1)$/
打破这个:
行尾
您为访问级别引入了错误的模式,一个随机的分词符号,无法正确捕获多个空格,这是您的模式崩溃的地方。
答案 1 :(得分:4)
^(?:[1-5] )?[a-z]{3,5}[0-9]{3,5} +([0-9]{4}) +\1$
<强>解释强>
^ Anchor start of line. (?:[1-5] )? Optional access level 1 to 5 followed by a single space, the group is non-capturing. [a-z]{3,5} User name with 3 to 5 lower case letters followed by [0-9]{3,5} 3 to 5 digits. _+ At least one space. ([0-9]{4}) A 4 digit pin number captured into group \1. Without the non-capturing group from above the pin number would be captured into group \2. _+ At least one space. \1 A backreference to the pin number captured in group \1. $ Anchor end of line.
答案 2 :(得分:2)
我马上就看到了一些问题:
\d{1,5}
将匹配任何数字(0-9)1到5次。即0001,12,3,41332。我认为你正在寻找[1-5],它将匹配1-5的范围内的一位数。
/s
应为\s
[a-z]{3,5}\b\d{3,5}\s
我不确定你为什么会\b
。
我认为首先解决这些问题。 :)
答案 3 :(得分:0)
试试这个:([1-5])?\s[a-z]{3,5}(\s*\d{4}){2}
答案 4 :(得分:0)
听起来你想要第一个空格,即使没有指定访问级别?如果是这样,我认为应该这样做:
/^([1-5])? [a-z]{3,5}\d{3,5} +(\d{4}) +\2$/
如果空格是可选的,只需将其移到第一组括号中即可。
要显示警报,应该使用简单的if / else。
答案 5 :(得分:0)
试试这个:
^(?:[1-5] )?[a-z]{3,5}\d{3,5} +(\d{4}) +\1$
您可能会发现my regex tool对于测试正则表达式非常有用。它有一个“解释”模式,可以打破表达并描述它的作用,如果你被卡住了。
祝你好运!答案 6 :(得分:0)
这是一个Python答案,展示了re.VERBOSE工具,如果你想明天回来并了解你的正则表达式正在做什么,这非常方便。
有关详细说明,请参阅this。你不需要藤蔓或绳索来摆动。 : - )
import re
match_logon = re.compile(r"""
[1-5]? # 1. start with an optional access level (a digit from 1 to 5)
[ ] # 2. followed by a space
[a-z]{3,5} # 3. then a user name consisting of between 3 and 5 small letters
\d{3,5} # 4. followed by between 3 and 5 digits
[ ]+ # 5. then one or more spaces
(\d{4,4}) # 6. and then a four digit pin number (captured for comparison)
[ ]+ # 7. then one or more spaces
\1 # 8. and the same pin again for confirmation..
$ # match end of string
""", re.VERBOSE).match
tests = [
("1 xyz123 9876 9876", True),
(" xyz123 9876 9876", True), # leading space? revisit requirement!
("0 xyz123 9876 9876", False),
("5 xyz123 9876 9876", False), # deliberate mistake to test the testing mechanism :-)
("1 xy1234 9876 9876", False),
("5 xyz123 9876 9875", False),
("1 xyz123 9876 9876\0", False),
]
for data, expected in tests:
actual = bool(match_logon(data))
print actual == expected, actual, expected, repr(data)
Results:
True True True '1 xyz123 9876 9876'
True True True ' xyz123 9876 9876'
True False False '0 xyz123 9876 9876'
False True False '5 xyz123 9876 9876'
True False False '1 xy1234 9876 9876'
True False False '5 xyz123 9876 9875'
True False False '1 xyz123 9876 9876\x00'
答案 7 :(得分:-1)
您所描述的内容不是常规语言,因此无法通过正则表达式进行解析。问题是您的要求6和8:正则表达式没有内存,因此无法检查6和8中的PIN是否相同。