使用正则表达式捕获 php

Capturing with regex php

我坚持使用以下正则表达式..

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

我试图捕捉以下示例中的所有类型,而不是之后的废话..我可以得到几个但不是全部。你能给我解释一下如何捕获所有吗?例如,GENRE:.......Hip-Hop 这行给我带来了麻烦。它还捕获 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

您可以使用此正则表达式从给定文本中捕获所有 genre/style,

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

解释:

  • (?:genre|style) - 按字面意思匹配 genrestyle
  • (?:\s+\w*)* - 匹配可选文本,这仅用于示例 genre 0djdjd f : House 否则这部分确实不需要
  • [ :.|>[-]+ - 匹配出现在 genre/style 文本
  • 之前的一个或多个字符
  • \K - 重置目前匹配的任何内容
  • [a-zA-Z]+(?:[ -][a-zA-Z]+)* - 匹配字母流派文本,可以是单个 space 或连字符分隔的文本。

Check this online demo

让我知道这是否准确地捕捉到了您想要的内容。