此问题已在此处有答案:
What is a word boundary in regex?(13个回答)
24天前关闭
我有一个不同单词的列表,我想过滤所有ids
,小写字母a-z和数字0-9,长度为6。
我还尝试了正则表达式[a-z0-9]{6}
与not ^
运算符的组合。
我的示例文本:abcdef abc 987 hello1 123456 abcde abcdefg 1234567 fedcba
。
- abcdef
- abc(太短)
- 987(太短)
1.你好 - 123456
- abcde(太短)
- abcdefg
- 1234567
- fedcba
1、4、5和9都可以,完美匹配
2、3和6太短,所以不匹配,ok
问题:7和9是7个字符长,为什么它们匹配?我知道第一部分确实匹配,但目标将是忽略太长的组。
作为一个变通方案,我做了一个前步骤:请给予我所有长度为6的单词。但这太难看了。我可以用一个正则表达式来完成这两个步骤吗?
我的目标平台是一个ruby程序。但我认为这个问题与我的目标语言无关。我用https://regex101.com/试过了。
来自评论
1.我得到的评论设置锚^[a-z0-9]{6}$
,但这不起作用,没有匹配。
1.这里是regex101@markalex-> https://regex101.com/r/7mTbjE/1的链接
1条答案
按热度按时间pbgvytdp1#
将正则表达式改为
\b[a-z0-9]{6}\b
。\b
表示字边界。如果你只需要检测整个字符串中的模式(而不是当它们被空格分隔时),那么你可以使用
^[a-z0-9]{6}$
(^
表示字符串的开头,$
表示字符串的结尾)。你原来的正则表达式不起作用,因为它只是检测到一行中有六个字母数字字符。这对于1234567和1234567都是如此。