Захват с помощью регулярного выражения PHP - PullRequest
0 голосов
/ 16 марта 2019

я застрял со следующим регулярным выражением ..

(genre|style).*?(\.|\:|\||\>|\[|\-)

Я пытаюсь охватить все жанры в следующем примере, а не дерьмо после ... Я могу получить пару, но не все из них.Можете ли вы объяснить мне, как захватить все?Например, строка GENRE: ........ Хип-хоп доставляет мне неприятности.Это также захват PLAYTIME .. как я могу остановить захват, если найдено несколько пробелов?

GENRE       : Pop cult speech
genre......: Thrash Metal   crap1  crap2   
genre    : House
style: dance
genre.....:        house
genre 0djdjd f : House
style | elektronic house
genre > Metal Hard rock
GENRE:........Hip-Hop              PLAYTiME:....73:31          
Genre.....  - Indie                    Year   - 2019               
STYLE: Folk
GENRE........[ Euro-House   crap crap crap
Genre       : Hard Rock                     crap crap

1 Ответ

1 голос
/ 16 марта 2019

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

(?:genre|style)(?:\s+\w*)*[ :.|>[-]+\K[a-zA-Z]+(?:[ -][a-zA-Z]+)*

Пояснение:

  • (?:genre|style) - соответствует genre или style буквально
  • (?:\s+\w*)* - соответствует необязательному тексту, и это только для образца genre 0djdjd f : House, иначе эта часть действительно не нужна
  • [ :.|>[-]+ - соответствует одному или нескольким этим символам, которые появляются перед текстом жанра / стиля
  • \K - Сбрасывает все, что соответствует
  • [a-zA-Z]+(?:[ -][a-zA-Z]+)* - Соответствует алфавитному тексту жанра, который может быть одним пробелом или дефисом.

Проверьте это онлайн демо

Дайте мне знать, отражает ли это именно то, что вы хотели.

...