正则表达式 – 确定正则表达式中存在哪些命名捕获?

前端之家收集整理的这篇文章主要介绍了正则表达式 – 确定正则表达式中存在哪些命名捕获?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
给定带有命名捕获的正则表达式,是否可以确定re中存在哪些命名捕获?

注意:我只有正则表达式 – 我没有匹配re的字符串.我想知道是否有办法查看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看起来很有前景.

但这似乎很多工作.你想做什么?

猜你在找的正则表达式相关文章