使正则表达式的尾部部分可选

发布于 2024-10-22 05:26:02 字数 388 浏览 5 评论 0原文

我正在使用以下正则表达式来匹配下面的字符串,到目前为止一切顺利。现在,我如何使 BAZ 的内容成为可选,以便它与 BAZ () 的情况匹配?

$str = '- 10 TEST (FOO 3 TEST.BAR 213 BAZ (\HELLO) TEST';

preg_match('/FOO (\d+).+BAR (\d+).+BAZ \(\\\\(\w+)\)/i', $str, $match);

$str = '- 10 TEST (FOO 3 TEST.BAR 213 BAZ () TEST';
$array = array(
    'FOO' => 3,
    'BAR' => 213,
    'BAZ' => 
);

I'm using the following regex to match the string below, so far so good. Now, how could I make the content of BAZ optional so it matches cases where BAZ ()?

$str = '- 10 TEST (FOO 3 TEST.BAR 213 BAZ (\HELLO) TEST';

preg_match('/FOO (\d+).+BAR (\d+).+BAZ \(\\\\(\w+)\)/i', $str, $match);

$str = '- 10 TEST (FOO 3 TEST.BAR 213 BAZ () TEST';
$array = array(
    'FOO' => 3,
    'BAR' => 213,
    'BAZ' => 
);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

执手闯天涯 2024-10-29 05:26:02

听起来您只想将整个内容包装在非捕获组中并添加 ? 运算符。

/FOO (\d+).+BAR (\d+).+BAZ (?:\(\\\\(\w+)\))?/i

请注意,这捕获了 BAZ,其后没有括号。如果您正在寻找 BAZ (),请使用:

/FOO (\d+).+BAR (\d+).+BAZ \((?:\\\\(\w+))?\)/i

Sounds like you just want to wrap the whole thing in a non-capturing group and add a ? operator.

/FOO (\d+).+BAR (\d+).+BAZ (?:\(\\\\(\w+)\))?/i

Note that this captures BAZ with no parentheses after it. If you're looking for BAZ () instead, use this:

/FOO (\d+).+BAR (\d+).+BAZ \((?:\\\\(\w+))?\)/i
邮友 2024-10-29 05:26:02

要使某些内容可选,您可以将其放入非捕获组 (?: ... ) 中,然后在该组后面放置一个问号。问号是量词,意思是“零或一”。

换句话说,将 this: 更改

\\\\(\w+)

为这样:

(?:\\\\(\w+))?

这样整个表达式就变成了:

/FOO (\d+).+BAR (\d+).+BAZ \((?:\\\\(\w+))?\)/i

To make something optional you can put it in a non-capturing group (?: ... ) then place a question mark after the group. The question mark is a quantifier that means "zero or one".

In other words, change this:

\\\\(\w+)

to this:

(?:\\\\(\w+))?

So the entire expression becomes:

/FOO (\d+).+BAR (\d+).+BAZ \((?:\\\\(\w+))?\)/i
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文