php正则表达式中具有相同名称的两个组
我有一个输入,其中包含子字符串,格式为php正则表达式中具有相同名称的两个组,php,regex,Php,Regex,我有一个输入,其中包含子字符串,格式为TXT number或number TXT。我想写regexp,它将匹配格式并只返回数字 我想出了这样的办法: $regex='/TXT(?[0-9]+)|(?[0-9]+)TXT/' 问题是,编译器说已经定义了名为number的组,即使中间有or运算符 在php中是否可以使用相同的名称编写两个组?如果不是,那么我如何编写这样的regexp 您可以使用(?|并在数字和文本之间添加空格 (?|TXT (?<number>[[0-9]+)|(?<
TXT number
或number TXT
。我想写regexp,它将匹配格式并只返回数字
我想出了这样的办法:
$regex='/TXT(?[0-9]+)|(?[0-9]+)TXT/'
问题是,编译器说已经定义了名为number
的组,即使中间有or运算符
在php中是否可以使用相同的名称编写两个组?如果不是,那么我如何编写这样的regexp 您可以使用(?|
并在数字和文本之间添加空格
(?|TXT (?<number>[[0-9]+)|(?<number>[[0-9]+) TXT)
要使用相同的名称编写两个组,您需要使用
(?J)
内联标志:
'/(?J)TXT(?<number>[0-9]+)|(?<number>[0-9]+)TXT/'
请注意,在您的情况下,您不需要以下组:
'/TXT\K[0-9]+|[0-9]+(?=TXT)/'
环顾四周的人也会在这里做这项工作。使用(?J)
标志:“/(?J)TXT(?[0-9]+)|(?[0-9]+)TXT/”
'/(?J)TXT(?<number>[0-9]+)|(?<number>[0-9]+)TXT/'
$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)/'