gpt4 book ai didi

php - PCRE:使用 PHP 捕获可选模式

转载 作者:可可西里 更新时间:2023-11-01 01:06:52 24 4
gpt4 key购买 nike

我有一个字符串,我需要从中捕获一个或两个子字符串(使用 PHP):

  • 第一个是必填项
  • 第二个是可选的
  • 第一个和第二个被不知名的垃圾隔开
  • 第二个可能会也可能不会跟着更多我不关心的垃圾

我无法让我的模式捕获第二个模式,除非我在模式字符串中强制要求它。当主题中只有第一个模式可用时,这会使模式失败。

我被难住了。这不应该那么难。

<?php

// sometimes the subject looks like this:
//$subject = 'pattern 111 -then some random junk-';
$subject = 'pattern 111 -then some random junk- pattern 222';

preg_match('/(pattern 111)(.*?)(pattern 222)?/', $subject, $matches);

print_r($matches);

?>

这是我从上面得到的:

Array
(
[0] => pattern 111
[1] => pattern 111
[2] =>
)

似乎归结为我如何使 {0,1}(即模式中最后的 ? 运算符)更加贪婪(具有讽刺意味的是,作为量词修饰符,它的作用恰恰相反)

最佳答案

在这里试试这个

(pattern 111)(?:.*(pattern 222))?

查看here on Regexr

我将第二组设为非捕获组,因此您有两个捕获组,第一个包含强制部分,第二个包含可选部分。

将惰性量词与最后的可选部分组合起来是行不通的,但是如果可选部分缺失,则无需按照您的强制模式匹配部分,因此只需将未知的垃圾包含到可选中即可部分。

关于php - PCRE:使用 PHP 捕获可选模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8894708/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com