【发布时间】:2025-12-25 03:10:16
【问题描述】:
我有一个字符串,我需要从中捕获一个甚至两个子字符串(使用 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}(即模式中的最后一个 ? 运算符)更加贪婪(讽刺的是,作为量词修饰符它的作用正好相反)
【问题讨论】:
标签: php regex preg-match pcre