我正在尝试使用正则表达式,但由于我缺乏经验,我正在努力。我们的想法是扫描以'GB:'
开头的特定字符串例如,它应该检测到:
但不是:
我有这个正则表达式匹配我正在寻找的字符串(考虑到不同的空格,格式等):
/^([A-Z]{3}\s?(\d{3}|\d{2}|d{1})\s?[A-Z])|([A-Z]\s?(\d{3}|\d{2}|\d{1})\s?[A-Z]{3})|(([A-HK-PRSVWY][A-HJ-PR-Y])\s?([0][2-9]|[1-9][0-9])\s?[A-HJ-PR-Z]{3})$/
但现在我想在前面添加GB:位。我在上面的表达式中会改变什么来做这个?
答案 0 :(得分:4)
我会在第一个^
之后添加GB:因为那是表示行开头的内容。
/ ^ GB:([AZ] {3} \ S(\ d {3} | \ d {2} | d {1})\ S [AZ]?)|([AZ] \ S? (\ d {3} | \ d {2} | \ d {1})\ S [AZ] {3})|(([A-HK-PRSVWY] [A-HJ-PR-Y])\ S([0] [2-9] | [1-9] [0-9])?\ S [A-HJ-PR-Z] {3})$ /
编辑:是的,我想有一个:那里。右邻。
答案 1 :(得分:3)
/^GB:([A-Z]{3}\s?(\d{3}|\d{2}|d{1})\s?[A-Z])|([A-Z]\s?(\d{3}|\d{2}|\d{1})\s?[A-Z]{3})|(([A-HK-PRSVWY][A-HJ-PR-Y])\s?([0][2-9]|[1-9][0-9])\s?[A-HJ-PR-Z]{3})$/
让你的正则表达式说“以GB开头:然后......”
答案 2 :(得分:1)
声明的开头是:
^GB:([A-Z]{3}\s?(\d{3}|\d{2}|d{1})\s?[A-Z])|([A-Z]\s?(\d{3}|\d{2}|\d{1})\s?[A-Z]{3})|(([A-HK-PRSVWY][A-HJ-PR-Y])\s?([0][2-9]|[1-9][0-9])\s?[A-HJ-PR-Z]{3})$
要记住的是像[A-Z]{3}
这样的陈述,它会查找连续的3个大写字母,换句话说,它会查找模式,而不是您想要的完全匹配。
除非在GB:
之后有特定的搜索内容,否则您可以将其缩短为^GB:.*$
。
答案 3 :(得分:1)
只需添加“GB:”,就像你可以减少你的表达一样:“(\ d {3} | \ d {2} | d {1})”只需“(\ d {1,3}} )”。
答案 4 :(得分:1)
你应该能够像所有人所说的那样将GB:
放在前面,但现有的正则表达式中存在错误。在自由间隔模式下更容易看到:
/^([A-Z]{3} \s? \d{1,3} \s? [A-Z])
|
([A-Z] \s? \d{1,3} \s? [A-Z]{3})
|
([A-HK-PRSVWY][A-HJ-PR-Y] \s? (?:0[2-9]|[1-9][0-9]) \s? [A-HJ-PR-Z]{3})$
/x
^
锚仅影响第一个替代,而$
仅影响第三个替代。你必须添加另一层遏制:
/^
(?:
([A-Z]{3} \s? \d{1,3} \s? [A-Z])
|
([A-Z]\s? \d{1,3} \s? [A-Z]{3})
|
([A-HK-PRSVWY][A-HJ-PR-Y] \s? (?:0[2-9]|[1-9][0-9]) \s? [A-HJ-PR-Z]{3})
)$
/x
...现在你可以添加前缀:
/^
GB:
(?:
([A-Z]{3} \s? \d{1,3} \s? [A-Z])
|
([A-Z]\s? \d{1,3} \s? [A-Z]{3})
|
([A-HK-PRSVWY][A-HJ-PR-Y] \s? (?:0[2-9]|[1-9][0-9]) \s? [A-HJ-PR-Z]{3})
)$
/x
...或在线噪声模式下:
/^GB:(?:([A-Z]{3}\s?\d{1,3}\s?[A-Z])|([A-Z]\s?\d{1,3}\s?[A-Z]{3})|([A-HK-PRSVWY][A-HJ-PR-Y]\s?(?:0[2-9]|[1-9][0-9])\s?[A-HJ-PR-Z]{3}))$/