Выражение регулярных выражений для слов между двумя знаками препинания - PullRequest
0 голосов
/ 25 февраля 2019

Как мне сделать, чтобы это выражение регулярного выражения находило каждую строку в моем тексте, которая соответствует этому формату, я попытался добавить фигурные скобки, но он нашел только первое слово в формате, а после удаления нашел каждое слово.

My regex expression: {((?:[a-z][a-z0-9_]*))
My text: {Hello|Hi|Hey} John, How are you? I'm fine

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Чтобы получить все совпадения в фигурных скобках, вы можете сопоставить от { до } и захватить то, что находится между ними в группе захвата.

Затем используйте explode и используйте | в качестве разделителя.Если у вас есть несколько результатов, вы можете зациклить результаты:

$str = "My text: {Hello|Hi|Hey} John, How are you? I'm fine";
preg_match_all('~{([^}]+)}~', $str, $matches);

foreach($matches[1] as $match) {
    print_r(explode('|', $match));
}

Результат

Array
(
    [0] => Hello
    [1] => Hi
    [2] => Hey
)

Php demo

Другой вариант может быть сделатьиспользование якоря \G:

(?:\G(?!\A)|{(?=[^{}]*?}))([^|{}]+)[|}]

Пояснение

  • (?: Группа без захвата
    • \G(?!\A) Конецпредыдущий матч, но не в начале
    • | или
    • {(?=[^{}]*?}) матч { и утверждение, что содержит не }, а затем }
  • ) Закрыть группу без захвата
  • ([^|{}]+) Захват в группе, соответствующей НЕ, что указано в классе символов
  • [|}] Совпадение с тем, что указано в классе персонажей

php demo

0 голосов
/ 25 февраля 2019

Вы можете использовать это регулярное выражение, которое даст вам все совпадения в фигурных скобках,

(?<=[{|])\w+(?=[|}])

Демо

Попробуйте этот код Python,

$s = "{Hello|Hi|Hey} John, How are you? I'm fine";
preg_match_all('/(?<=[{|])\w+(?=[|}])/',$s,$matches);
print_r($matches);

Array
(
    [0] => Array
        (
            [0] => Hello
            [1] => Hi
            [2] => Hey
        )

)

Онлайн-демонстрация PHP

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