【问题标题】:PCRE match a single character between curly bracesPCRE 匹配大括号之间的单个字符
【发布时间】:2018-12-06 10:52:11
【问题描述】:

我编写了一个 PCRE,试图匹配美元符号 ($),前提是它们位于大括号之间。

我的示例文本是这样的: Lorem $100 ipsum dolor {value$banana} sit $500 amet.

(?<=\{)(.*?)(?=\}) 模式为我提供了花括号 ({value$banana}) 之间的所有内容,但我需要完全匹配中间的美元符号。我不需要匹配多次出现的模式。

我一直在努力解决这个问题,但在任何地方都找不到答案。提前致谢!

【问题讨论】:

    标签: regex pcre


    【解决方案1】:

    如果你只想在花括号内匹配一个$,你可以使用一次

    '~\{[^{}$]*\K\$(?=[^{}]*})~'
    

    regex demo

    详情

    • \{ - 一个 { 字符
    • [^{}$]* - 除了{}$ 之外还有 0 个或多个字符
    • \K - match reset operator 从匹配内存缓冲区中丢弃所有匹配的文本
    • \$ - 一个 $ 字符
    • (?=[^{}]*}) - 正向前瞻,要求存在除 {} 之外的任何 0+ 字符,然后在当前位置右侧紧邻 }

    【讨论】:

    • 很好地使用\K 来避免+1 后的可变宽度。每天在这个网站上学习新东西。
    • 真正干净的解决方案。
    猜你喜欢
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 2011-01-21
    • 2021-04-16
    • 2014-10-31
    • 2011-02-11
    相关资源
    最近更新 更多