加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 05:36:39 所属栏目:百科 来源:网络整理
导读:给定带有命名捕获的正则表达式,是否可以确定re中存在哪些命名捕获? 注意:我只有正则表达式 – 我没有匹配re的字符串.我想知道是否有办法查看re的结构并找到re中使用的所有命名捕获. 解决方法 在一般情况下,这是不可能的,因为有人可能会有一个(?? {….})代
给定带有命名捕获的正则表达式,是否可以确定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看起来很有前景.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读