正则表达式反向引用匹配时间失败问题咨询
问题解答
为什么原正则匹配失败?
反向引用\1的作用是复用第一个捕获组已经匹配到的具体文本内容,而非复用捕获组里的正则规则。比如你的第一个捕获组匹配到了9:00 AM,\1就只能和这个字符串完全匹配,但目标文本后面的时间是5:00 PM,和前面内容完全不同,所以反向引用自然失效。
如何用相同模式匹配两端不同的时间?
反向引用仅适用于匹配前后完全相同的内容,如果你的需求是验证前后两段都是符合格式的时间(内容可不同),直接重复写两次相同的正则模式即可:
- 若需要捕获前后两个时间,就用两个捕获组(也就是你已经成功的写法):
(\d(?::\d{2})?\s\wM)\sto\s(\d(?::\d{2})?\s\wM) - 若不需要捕获这两个时间,仅做格式验证,可把捕获组改成非捕获组(用
(?:...)),减少不必要的内存占用:(?:\d(?::\d{2})?\s\wM)\sto\s(?:\d(?::\d{2})?\s\wM)
只有当你要匹配前后完全相同的时间(比如9:00 AM to 9:00 AM)时,反向引用才会生效,这时候你的原正则就能正常匹配。
内容的提问来源于stack exchange,提问作者Anuja Nimesh
相关产品推荐
相关产品推荐

