应包含任何顺序的短语和匹配组的正则表达式

Regex which should contain phrase and a matching group in any order

我正在尝试检查字符串中的短语“Alla dagar”,无论是主持还是后跟 digit(possible space?)-(possible space?)digit,它之间可能包含也可能不包含换行符。

示例:

### Item 1 - Should match
8-17
Alla dagar

### Item 2 - Should match
Alla dagar
08-21

### Item 3 - Should not match
8-17

### Item 4 - Should match
7 - 9 Alla dagar

### Item 5 - Should match
Alla dagar 17-23

我想出了两个正则表达式,但我都没有开始工作。第一个是 this one:

^(?=.*s|Alla dagar)(?=(?<from>\d+) ?- ?(?<to>\d+)).*$

The other regex I wrote 也不起作用,因为它不是唯一的。如果“alla dagar”不存在,它也会匹配,因为这些是可选的。

^((?:s|Alla dagar))?\n*?((?<from>\d+) ?- ?(?<to>\d+))\n*?((?:s|Alla dagar))?\n?$

我的问题是,如何使用 ((?<from>\d+) ?- ?(?<to>\d+)) 进行匹配并要求字符串中存在短语 Alla dagar

您可以使用

(?<from>\d+)\s*-\s*(?<to>\d+)\s*Alla dagar|Alla dagar\s*(?<from>\d+)\s*-\s*(?<to>\d+)

regex demo。确保使用 PCRE_INFO_JCHANGED 标志(正则表达式开头的 (?J) 可用于将其合并到正则表达式本身)以在单个表达式中启用多个命名捕获组。

详情:

  • (?<from>\d+) - “来自”组:一个或多个数字
  • \s*-\s* - 用零个或多个空格括起来的连字符
  • (?<to>\d+) - 将“to”分组:一位或多位数字
  • \s* - 零个或多个空格
  • Alla dagar - 固定字符串
  • | - 或
  • Alla dagar\s*(?<from>\d+)\s*-\s*(?<to>\d+) - 固定字符串,零个或多个空格,“from”组:一个或多个数字,用零个或多个空格括起来的连字符,“to”组:一个或多个数字。