gpt4 book ai didi

php - 多个正则表达式模式需要开始 ^ 和结束 $

转载 作者:行者123 更新时间:2023-12-02 17:10:36 29 4
gpt4 key购买 nike

如果给定 [name=anystring]#anystring 其中 anystring 是一个已经删除了所有空格的字符串,我希望返回 任意字符串

在尝试两者之前,我分别成功地执行了它们。

$pattern = "/^#(.+)$/";
preg_match($pattern, '#anystring', $matches);
preg_match($pattern, '[name=anystring]', $matches);

$pattern = "/^\\[name=(.+)\\]$/";
preg_match($pattern, '#anystring', $matches);
preg_match($pattern, '[name=anystring]', $matches);

然后我尝试将它们组合起来。

# with start ^ and end $ on both
$pattern = "/^#(.+)$|^\\[name=(.+)\\]$/";
preg_match($pattern, '#anystring', $matches);
preg_match($pattern, '[name=anystring]', $matches);

# without start ^ and end $ on both
$pattern = "/^#(.+)|\\[name=(.+)\\]$/";
preg_match($pattern, '#anystring', $matches);
preg_match($pattern, '[name=anystring]', $matches);

虽然我“有点”得到了我要找的东西,但第二个模式 [name=(.+)] 返回一个包含三个元素的数组。

我应该在第一个模式之后结束 $ 并在第二个模式之前开始 ^ 吗?这会导致第二个模式返回一个包含三个元素的数组吗?

编辑。显示一个版本如何显示更多数组元素

<?php

$pattern = "/^(?:#(.+)|\\[name=(.+)\\])$/s";
preg_match($pattern, '#anystring', $matches);
print_r($matches);
preg_match($pattern, '[name=anystring]', $matches);
print_r($matches);

(
[0] =&gt; #anystring
[1] =&gt; anystring
)
Array
(
[0] =&gt; [name=anystring]
[1] =&gt;
[2] =&gt; anystring
)

最佳答案

您正在寻找 branch reset group其中捕获组的编号从组之前的最后一个 ID 开始:

^(?|#(.+)|\[name=(.+)])$
^^

参见 regex demo

enter image description here

详情

  • ^ - 字符串的开始
  • (?| - 分支重置组的开始
    • #(.+) - # 然后第 1 组捕获 1+ 个字符,尽可能多
    • | - 或
    • \[name= - [name= 子串
    • (.+) - 第 1 组(再次)匹配除换行字符以外的 1+ 个字符,尽可能多
    • ] - ]
  • ) - 分支重置组结束
  • $- 字符串结尾。

关于php - 多个正则表达式模式需要开始 ^ 和结束 $,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49559735/

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