给定带有命名捕获的正则表达式,是否可以确定 re 中存在哪些命名捕获?
注意:我只有正则表达式 - 我没有与 re.js 匹配的字符串。我想知道是否有办法查看 re 的结构并找到 re 中使用的所有命名捕获。
最佳答案
这在一般情况下是不可能的,因为有人可能有一个 (??{....})
代码插入,它变成了在匹配执行期间使用迄今为止未见过的名称的命名捕获的东西。
在特定情况下,您可能能够从 C API 深入了解底层结构。 Devel::Peek
推荐了一些你可能想要四处逛逛的地方:
% perl -MDevel::Peek -le 'Dump qr/(?<foo>\w+) (?&foo)/'
SV = IV(0x8033ac) at 0x8033b0
REFCNT = 1
FLAGS = (TEMP,ROK)
RV = 0x803d40
SV = REGEXP(0x8173d8) at 0x803d40
REFCNT = 1
FLAGS = (OBJECT,POK,FAKE,pPOK)
PV = 0x216fc0 "(?^:(?<foo>\\w+) (?&foo))"
CUR = 24
LEN = 0
STASH = 0x803b50 "Regexp"
EXTFLAGS = 0x600000 (USE_INTUIT_NOML,USE_INTUIT_ML)
INTFLAGS = 0x1
NPARENS = 1
LASTPAREN = 0
LASTCLOSEPAREN = 0
MINLEN = 3
MINLENRET = 3
GOFS = 0
PRE_PREFIX = 4
SEEN_EVALS = 0
SUBLEN = 0
SUBBEG = 0x0
ENGINE = 0x162b60
MOTHER_RE = 0x80fab0
PAREN_NAMES = 0x80fa40
SUBSTRS = 0x2044b0
PPRIVATE = 0x206360
OFFS = 0x204280
例如,
PAREN_NAMES
看起来很有前途。但这似乎是很多工作。你想做什么?
关于regex - 确定正则表达式中存在哪些命名捕获?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7802855/