【问题标题】:Regex: how to add a capture group?正则表达式:如何添加捕获组?
【发布时间】:2020-06-17 13:46:39
【问题描述】:

我目前有this regex:

\[(?:\w+\*?\s+)?([^][]+)]

我想添加另一个捕获组,这样我就可以捕获组之前的文本值。

例如:

Je naam (verplicht) [text* your-test]

我的正则表达式当前捕获[text* your-test]。我想添加另一个捕获“Je naam (verplicht)”部分的组。

我怎样才能做到这一点?

【问题讨论】:

    标签: php regex


    【解决方案1】:

    您可以将此正则表达式与其他捕获组一起使用:

    ([^][\h]+(?:\h+[^][\h]+)*)?\h+\[(?:\w+\*?\h+)?([^][]+)]
    

    Updated RegEx Demo

    • ([^][\h]+(?:\h+[^][\h]+)*)? 是新的可选捕获组,它匹配 [...] 之前的文本并将其捕获到一个单独的组中。
    • [^][\h]+ 匹配任何不是[] 和空格的字符中的一个或多个。

    【讨论】:

    • 感谢您的回答!它在沙箱中完美运行,但是当我在我的应用程序中尝试它时,捕获组只返回空数组,而文本/字符串是相同的。其他捕获组仍然有效。任何想法为什么会发生这种情况?
    • 如果文本相同,那么正则表达式应该适用于任何 PHP 代码。
    • 请注意,在 php 中 \ 会转义某些字符,因此您需要对它们进行双重转义(或者只是确保全部转义)。 '/([^][\\h]+(?:\\h+[^][\\h]+)*)?\\h+\\[(?:\\w+\\*?\\h+)?([^][]+)]/'
    • 我在这里问过这个问题:stackoverflow.com/questions/62431649/…
    • 谢谢,让我看看。
    猜你喜欢
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    相关资源
    最近更新 更多