【发布时间】:2015-11-22 18:55:19
【问题描述】:
我正在尝试编写一个正则表达式,它可以匹配具有这些条件的字符串中的单词:
- 单词长度必须为 8 个字符。
- 单词的任何位置都必须有 1 个字母字符 字。
- 单词的任何位置都必须有 7 位数字。
\b(?=\w{8}\z)(?=[^a-zA-Z]*[a-zA-Z]{1})(?=(?:[\D]*[\d]){7}).*\b
这可以找到"123r1234" 和"foo 123r1234",但找不到"foo bar 123r1234 foo"。
我试图添加单词边界,但它没有用。
我的正则表达式有什么问题,我该如何解决?
谢谢。
【问题讨论】:
-
@stribizhev 你是对的 :)
-
@MarcosPérezGude:那为什么要发布其他人的建议?你能解释什么是错的,什么是错的吗?为什么要删除这个或那个?
-
不要在你的正则表达式中使用 \z - “如果你只想在字符串的绝对末尾进行匹配,请使用 \z。”。您需要编辑您的正则表达式,但 \z 是它仅匹配字符串的最后一个单词的原因。
-
@stribizhev 是的,它有效。谢谢。如果您将其发布为答案,我会批准它。
标签: regex