gpt4 book ai didi

php - php 正则表达式中具有相同名称的两个组

转载 作者:行者123 更新时间:2023-12-03 02:53:26 24 4
gpt4 key购买 nike

我有一个输入,其中包含格式为 TXT number 的子字符串或number TXT 。我想编写正则表达式来匹配格式并仅返回数字。

我想出了这样的东西:

$regex = '/TXT(?<number>[0-9]+)|(?<number>[0-9]+)TXT/'

问题是编译器说该组的名称为 number即使中间有 or 运算符,也已经定义了。

在php中是否可以写2个同名的组?如果不是那么我怎么能这样写正则表达式呢?

最佳答案

要编写 2 个具有相同名称的组,您需要使用 (?J) 内联标志:

'/(?J)TXT(?<number>[0-9]+)|(?<number>[0-9]+)TXT/'

查看 regex demo

Documentation:

J (PCRE_INFO_JCHANGED)
The (?J) internal option setting changes the local PCRE_DUPNAMES option. Allow duplicate names for subpatterns. As of PHP 7.2.0 J is supported as modifier as well.

PHP demo:

$regex = '/(?J)TXT(?<number>[0-9]+)|(?<number>[0-9]+)TXT/';
if (preg_match_all($regex, "TXT123 and 456TXT1", $matches, PREG_SET_ORDER, 0)) {
foreach ($matches as $m) {
echo $m["number"] . PHP_EOL;
}
}

请注意,在您的情况下,您不需要这些组:

'/TXT\K[0-9]+|[0-9]+(?=TXT)/'

环视也可以在这里完成工作。

关于php - php 正则表达式中具有相同名称的两个组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58432846/

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