我有一个字符串需要捕获一个或两个子串(使用PHP):
- 第一个是必需的 - 第二个是可选的 - 第一个和第二个由未知字符分隔 - 第二个后面可能会跟着更多我不关心的字符
除非在模式字符串中将其设为必需模式,否则我无法捕获第二个模式。这使得当主题中只有第一个模式可用时模式失败。
我被卡住了。 这不应该那么难。
这是我从上面得到的内容:
似乎归结为如何使{0,1}(即模式中的最终?运算符)更加贪婪(具有讽刺意味,因为作为量词修饰符时它会产生相反的效果)。
- 第一个是必需的 - 第二个是可选的 - 第一个和第二个由未知字符分隔 - 第二个后面可能会跟着更多我不关心的字符
除非在模式字符串中将其设为必需模式,否则我无法捕获第二个模式。这使得当主题中只有第一个模式可用时模式失败。
我被卡住了。 这不应该那么难。
<?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}(即模式中的最终?运算符)更加贪婪(具有讽刺意味,因为作为量词修饰符时它会产生相反的效果)。