соответствие шаблону регулярного выражения группы в php "preg_match" - PullRequest
0 голосов
/ 02 марта 2020

У меня есть строка

(A) fdkf djkf gsdfjkg hsfl (B) jfg dkfjg hdksfjg dkfj (c) ndfkj gndfg ndfn (d) kdjfskdj fs; s dknls * 100 Desired * 100 Desired * 100 вывод должен быть таким:

4 group matched
(A) fdkf djkf gsdfjkg hsfl
(B) jfg dkfjg hdksfjg dkfj
(c) ndfkj gndfg ndfn
(d) kdjfskdj fs;s dknls

Пожалуйста, помогите

Я пытаюсь /((.+?) (?=\())/ регулярное выражение, но он не создает 4 группы

Я пытаюсь создать этот шаблон здесь https://regex101.com/r/KxAcaV/1

$re = '/((.+?) (?=\())/';
$str = '(A) fdkf djkf gsdfjkg hsfl (B) jfg dkfjg hdksfjg dkfj (c) ndfkj gndfg ndfn  (d) kdjfskdj fs;s dknls';

preg_match($re, $str, $matches, PREG_OFFSET_CAPTURE, 0);

// Print the entire match result
var_dump($matches);

Ответы [ 3 ]

2 голосов
/ 02 марта 2020

Использование preg_match_all:

$str = '(A) fdkf djkf gsdfjkg hsfl (B) jfg dkfjg hdksfjg dkfj (c) ndfkj gndfg ndfn (d) kdjfskdj fs;s dknls';

preg_match_all('/\(.+?\).+?(?= \(|$)/', $str, $m);
print_r($m[0]);

Выход:

Array
(
    [0] => (A) fdkf djkf gsdfjkg hsfl
    [1] => (B) jfg dkfjg hdksfjg dkfj
    [2] => (c) ndfkj gndfg ndfn
    [3] => (d) kdjfskdj fs;s dknls
)
1 голос
/ 02 марта 2020

Проще всего разбить вашу строку с помощью регулярного выражения

(?i) +(?=\([a-z]\))

, которое соответствует одному или нескольким пробелам, за которыми следует левая скобка, за которой следует буква с правой скобкой, (?=\([a-z]\)) - позитивный взгляд .

демо

1 голос
/ 02 марта 2020

Если ваша строка всегда имеет 4 группы, то вы можете использовать шаблон , соответствующий символу в скобках, за которым следует текст, повторенный 4 раза:

^(\(.\).+?)\s+(\(.\).+?)\s+(\(.\).+?)\s+(\(.\).+?)$

Но если ваша строка имеет переменное количество групп, тогда вы не можете получить их все в разных совпадающих группах, вам нужно получить их с помощью preg_match_all:

(\(.\)[^(]+)

Демонстрация здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...