我正在使用在线正则表达式调试器Regexr(www.regexr.com),它正在为我正确识别工作和非工作的正则表达式。但是,我坚持使用Regexr认为正常工作的两个特定正则表达式,但他们在我的实现中不会工作。第一个我用来定位PGP密钥,特别是页眉和页脚。我的正则表达是:
[-]{5}[A-Z]{3,5}\sPGP\sMESSAGE[-]{5}[^.]
我用它来识别:
-----BEGIN PGP MESSAGE-----
和
-----END PGP MESSAGE-----
我在实际执行中不能工作的另一个正则表达式是识别英国护照号码:
\b[0-9]{10}GB[RP][0-9]{7}[UMF]{1}[0-9]{9}\b
在regexr中运行的示例:
7086493126GBR6510204M150224602
1234567890GBP1234567F123456712
有人可以提供一些见解,说明为什么这些不起作用?
答案 0 :(得分:0)
我总是使用https://regex101.com/来测试我的正则表达式。它准确地解释了你的正则表达式正在做什么,并告诉你你的字符串是否匹配。
尝试一下!
如果您无法确定问题,那么正则表达式可能不是问题。
使用regex101,我认为这可能会更好:^[-]{5}[A-Z]{3,5}\sPGP\sMESSAGE[-]{5}$
如果您阅读[^.]
上的说明,则说“匹配下面列表中不存在的单个字符。字面字符.
”。
答案 1 :(得分:0)
我认为你的问题是正则表达式的最后一部分:[^.]
这将匹配任何不是文字句号的字符。我不认为这是你的预期用途,它肯定会导致正则表达式本身与开始和结束消息不匹配。
要明确 - 虽然.
通常是元字符,但在[]
内它只是一个文字字符。
对于GB护照ID,我必须在更多上下文中看到字符串,但问题几乎肯定是单词边界元字符。