正则表达式:递归反向引用 - 有何用处?

发布于 2024-08-20 02:22:20 字数 137 浏览 8 评论 0原文

我在许多正则表达式引擎中发现了一些有趣的可能性:

可以在捕获组内放置反向引用并引用该组。

例如:(\1)

我的问题:为了什么可以使用正则表达式模式吗?我无法想象...

I found some interesting possibility in many regex engines:

It's possible to place backreference inside the capture group and reference this group.

For example: (\1)

My question: for what regex patterns it may be used? I can't imagine...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

野却迷人 2024-08-27 02:22:20

有一个 使用嵌套引用的说明,我认为它清楚地表明了该功能的边际用途。

There is an explanation for use of nested references, which I think clearly demonstrates the marginal usefulness of this feature.

皓月长歌 2024-08-27 02:22:20

我有一个很长的 yaml 模式,我需要/想要从以下位置更改:

columns:
    id:
      type: string(36)
      fixed: true
      unsigned: false
      primary: true
      autoincrement: false
    descripcion:
      type: string(45)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false

到此:

columns:
    id: {type: string(36), fixed: true, unsigned: false, primary: true, autoincrement: false}
    descripcion: {...}...

在这种情况下,我需要在反向引用中进行一定程度的递归,因为列名称位于列描述之间。
这适用于每一行,但我不能将“{}”放在 $1 周围,我最终会在每个描述字段之间加上括号:

"\n^      ([^\n]+)"

I've got a long yaml schema, which I need/want to change from this:

columns:
    id:
      type: string(36)
      fixed: true
      unsigned: false
      primary: true
      autoincrement: false
    descripcion:
      type: string(45)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false

To this:

columns:
    id: {type: string(36), fixed: true, unsigned: false, primary: true, autoincrement: false}
    descripcion: {...}...

in this case I need a level of recursion in backrefences, because the column names are in between column description.
This is suitable for each line, but i cant put "{}" arround $1, I'd end up with brackets between each description field:

"\n^      ([^\n]+)"
把回忆走一遍 2024-08-27 02:22:20

怎么样(忽略空格):

{ .* ( { .* \1 .* } ) .* }

来匹配 C#/Java/... 中方法的主体

How about this (ignore the whitespace):

{ .* ( { .* \1 .* } ) .* }

to match the body of a method in C#/Java/...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文