用于从正则表达式模式中提取前瞻性和前瞻性的正则表达式

问题描述 投票:1回答:1

我有一个不寻常的应用程序,因此我需要提取正则表达式模式的后向和前瞻部分的内容(当然要使用正则表达式!)。例如以下模式:

(?<=(?:c|d))123(?=(?:x|y))

与以下字符串中的第一个123匹配:

abc123xyz123xyz

我需要提取以下字符串:

(?:c|d)

(?:x|y)

很难证明,因为我不能轻易找到正确的右括号,因为在示例中可能还会有其他括号。

只是想知道以前是否有人必须这样做。欢迎任何想法

regex regex-lookarounds
1个回答
0
投票

根据对问题的评论,我的理解是,询问者Kaveh1000对Wiktor的解决方案感到满意;但是似乎他对该解决方案的一部分感到困惑

(\((?:[^()]++|(?1))*\))

[我将尝试解释其工作原理(但我建议读Mastering Regular Expressions, 3rd Edition,该词专门用于该主题):

  1. 这是一个捕获组(…),我们可以在需要时参考(并且确实在4.2中进行此操作。]]]
  2. 它匹配一对在\(…\)之间的文字感觉异常;
  3. (?:…)*之间的东西是0或更多(普通贪婪)未捕获表达式的序列;
  4. [0个或多个重复中的每个都可以是

  5. 4.1。一个由0或多个非括号组成的序列[^()]++(我链接的书还解释了为什么++的所有格版本+在这里是必需的;我知道++ does

    ,但是在撰写本文时,我仍在掌握它正在解决的问题;我希望这不会使我失望),

    4.2。或(?1)之类的东西,与我们现在要匹配的正则表达式匹配(第1点);这是正则表达式的递归性。

    [请注意,文字括号仅通过\(\)出现在正则表达式的此部分中,这两个命令是有序的(先打开,然后关闭),并且两者必须匹配;这样可以保证正则表达式的这一部分仅与均衡的感觉匹配。

© www.soinside.com 2019 - 2024. All rights reserved.