当前位置: 首页 > 知识库问答 >
问题:

是否有方法省略正则表达式中的嵌套括号?

阙新觉
2023-03-14

我正在为PHPs'preg\u match\u all编写一个正则表达式函数,以查找包含字符串中所有内容的所有ifs(…)。(在我的例子中,我只有一个if,因为它不是问题的根源。)

以下是到目前为止我得到的信息:

模式:/ifs\(.*?\)/i

字符串:=iferror(如果是(或(“foo”、“bar”)、“a”或(“tar”、“scar”)、“b”或(“lar”)、“d”)、“c”)

当前输出:ifs(或(“foo”、“bar”)

预期输出:ifs(或(“foo”、“bar”)、“a”或(“tar”、“scar”)、“b”或(“lar”)、“d”)

问题是:正则表达式会找到第一个右括号。

我哪里做错了?如何处理嵌套括号?

演示:https://regex101.com/r/SgBqbW/1

共有1个答案

陆翔飞
2023-03-14

实际上,由于递归正则表达式的PHPs功能,您可以做到这一点。这是从该页上的评论中得到启发的:

$string = '=iferror(ifs(OR("foo", "bar"),"a",OR("tar", OR("scar", "baa")),"b",OR("lar"),"d"),"c")
blah blah ifs(OR("foo", "bar"),"a") and another one ifs("a", OR("tar", OR("scar", "baa")),"b",OR("lar"),"d")';
$regex = '/ifs(\(((?>[^()]+)|(?-2))*\))/';
preg_match_all($regex, $string, $matches);
print_r($matches[0]);

输出:

Array (
    [0] => ifs(OR("foo", "bar"),"a",OR("tar", OR("scar", "baa")),"b",OR("lar"),"d")
    [1] => ifs(OR("foo", "bar"),"a")
    [2] => ifs("a", OR("tar", OR("scar", "baa")),"b",OR("lar"),"d") 
)

3v4l.org上的演示

 类似资料:
  • 问题内容: 我一直试图在Java中编写一个正则表达式以删除下面括号中的所有内容,同时保留其他所有内容。 注意,括号可以嵌套,这就是为什么我的模式失败的原因 。有人能帮我吗?下面我试过了: 但这打印: d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 OO 6. Be2 e5 7. dxe5 dxe5 8. Qxd8 Rxd8 9. Bg5 Nbd7 10. OO

  • 我想将带有嵌套大括号的原始字符串解析为多维数组。下面我添加了一些有效的示例代码。但主要问题是,我的正则表达式只捕获第一个匹配的组,而忽略了另一个发生。 非常感谢您的帮助。 代码: 原始字符串(data.txt): 代码输出: 但例外输出:

  • 正如标题所说,以下是一个输入示例: 当然,匹配的字符串将通过递归进行处理。 我希望第一个递归匹配: 之后的过程不用说。。。

  • 我有一个带两个可能输出的字符串,它将被<代码>

  • 我有这样一个文本: 我试图在c#中使用正则表达式来提取嵌套的if/eles-段。 要查找“?”,我使用了: 模式1: 找到“:”我用了: 模式2:

  • 我有一个输入字符串,里面有括号,外面有双引号。这些括号可以嵌套。我想去掉只有在双引号外才有括号的字符串。 我尝试了这个正则表达式这将获取包含在圆括号内的所有内容,无论双引号内外。 我得到的实际输出是: 我预计产出为: