我有下面的正则表达式,我使用https://www.regextester.com/来测试它。
^(?=^.{10})[a-zA-Z]+:[0-9]+\s*
要求是输入可以是字母字符和数字,由冒号分隔,并带有一些尾随空格。输入必须以字母字符开头,但在尾随空格或我不想匹配的第10个数字之后可能有多余的字符。要匹配的字符串必须正好是10个字符。在下面的示例字符串中,我对我认为匹配的字符串进行了加粗。我没有在末尾锚定一个$,因为我知道输入字符串可能有10个以上的字符,所以我没有试图检查整个字符串是否匹配。
A:12345678// matches which is fine
A:123456789 //最多只能匹配8
FOO:567890s123 //只能匹配到0
实际的结果是,它也匹配第10个字符之后的所有字符,只要它是字母数字或空格。我希望它能匹配到第10个字符,仅此而已。我该如何修正这个表达式?
更新:我最终会尝试将这个正则表达式合并到一个C++程序中,使用boost正则表达式进行匹配。
4条答案
按热度按时间l5tcr1uw1#
如果支持的话,你可以使用一个lookbehind,在模式的末尾向左Assert10个字符:
模式匹配:
^
字符串开头[A-Za-z]+:[0-9]+
匹配1+字符A-Za-z,后跟:
和1+数字(?<=^.{10})
正向后查找,Assert从当前位置向左有10个字符Regex demo
如果要匹配尾随空格字符:
注意
\s
也可以匹配换行符。bvjxkvbb2#
(?=^.{10})
确保字符串至少有10个字符,但没有更多。为了确保前10个字符与主表达式匹配,您仍然需要一个锚。但是,它必须不仅仅是
$
:试试on regex101.com。
请注意,如果主要部分短于10个字符,则上面的表达式也会修剪尾随空格。如果您确实希望在匹配中包含尾随空格,请将
\h*
移到第二个lookahead之外:试试on regex101.com。
这个技巧在另一个问题中被an answer of mine部分覆盖。
pcww981p3#
使用捕获组来匹配所需的10个字符。
Regex:
xkrw2x1b4#
您可以利用多个结构来帮助缩小匹配范围。
这是一个细分。
我不确定你使用的是什么 * 正则表达式引擎 *,这里有一个使用 JavaScript 的例子。