regex - 在重复结构中使用正则表达式反向引用 ({N})

标签 regex

我需要匹配一个以该字符串可接受长度为前缀的字符串。

例如,{3}abc会匹配,因为 abc部分是 3长字符。 {3}abcd会失败,因为 abcd不是 3长字符。

我会用 ^\{(\d+)\}.{\1}$ (在花括号内捕获一个数字 N,然后是任何字符 N 次)但重复结构中的值似乎必须是一个数字(或者至少,它不会接受反向引用)。

例如,在 JavaScript 中这会返回 true:
/^\{(\d+)\}.{3}$/.test("{3}abc")
虽然这返回假:
/^\{(\d+)\}.{\1}$/.test("{3}abc")
这是否可以在单个正则表达式中完成,或者我是否需要将其分为两个阶段,例如:
/^\{(\d+)\}/.test("{3}abc") && RegExp("^\\{" + RegExp.$1 + "\\}.{" + RegExp.$1 + "}$").test("{3}abc")

最佳答案

正则表达式无法计算,因此您不能仅使用正则表达式来执行此操作。

您可以将字符串匹配到 /^\{(\d+)\}(.*)$/ ,然后检查是否 len($2)==int($1) .

在 Python 中,例如:

>>> import re
>>> t1 = "{3}abc"
>>> t2 = "{3}abcd"
>>> r = re.compile(r"^\{(\d+)\}(.*)$")
>>> m1 = r.match(t1)
>>> m2 = r.match(t2)
>>> len(m1.group(2)) == int(m1.group(1))
True
>>> len(m2.group(2)) == int(m2.group(1))
False

关于regex - 在重复结构中使用正则表达式反向引用 ({N}),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3407696/

相关文章:

python - 这两个正则表达式之间的区别

Python 从列表中获取所有正则表达式匹配组

javascript - '|'是什么(竖线字符)表示正则表达式?

Javascript 和正则表达式,多个匹配项

ruby - Ruby Regex 语句中的\S 和 [^\s] 有什么区别吗?

javascript - 从字符串中转义点,但在某些键旁边留下带有点的单词

javascript - RegExp 不区分大小写搜索带变量的整个单词

javascript - .exec 的正则表达式不起作用

JavaScript 正则表达式查找与开始和结束模式匹配的所有子字符串

python - 如何使用 Django 加速 PostgreSQL 数据库中的正则表达式查询