Если я сделаю это в PHP:
$str = "abc pqrs-1/2&3uvw xyz";
preg_match( "/([a-z]+)([^0-9a-z][0-9])+([a-z]+)/" , $str , $m );
Полученные совпадения в $m
будут:
[0] => "pqrs-1/2&3uvw"
[1] => "pqrs"
[2] => "&3"
[3] => "uvw"
Обратите внимание, как часть ([^0-9a-z][0-9])+
, которая должнапоймать "один не буквенно-цифровой символ, а затем купить одну цифру" один или несколько раз, имеет модификатор +
вне скобок.
Очевидно, что строка субъекта $str
содержит 3 соответствия для этого шаблона: -1
и /2
и &3
, но она запоминает только last .
Есть ли способ как-нибудь поймать их всех?
Я попытался preg_match_all
вместо preg_match
, но он найдет только несколько совпадений, если регулярное выражение whole встречается более одного раза в строке темы.
Для вербализации значения моего регулярного выражения:
- одна или несколько букв
- одна или несколько из: не алфавитно-цифровой символ, за которым следует цифра
- одна или несколько букв
Так что для приведенного выше примера строки я ожидаю, что результат будет примерно таким:
[0] => "pqrs-1/2&3uvw"
[1] => "pqrs"
[2] => [ "-1" , "/2" , "&3" ]
[3] => "uvw"
Но что бы я ни пытался,Я не могу заставить его также дать -1
и /2
совпадения?