我正在检查一个字符串中的短语"Alla dagar";由CCD_ 1主持或跟随,并且它可能包含也可能不包含其间的换行符。
示例:
### 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
我想出了两个正则表达式,但我都无法工作。第一个是这个:
^(?=.*s|Alla dagar)(?=(?<from>d+) ?- ?(?<to>d+)).*$
我写的另一个正则表达式也不起作用,因为它不是独占的。如果";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 dagars*(?<from>d+)s*-s*(?<to>d+)
请参阅regex演示。确保使用PCRE_INFO_JCHANGED
标志(如果要将正则表达式合并到正则表达式本身中,则可以使用正则表达式开头的(?J)
),以便在单个表达式中启用多个命名捕获组。
详细信息:
(?<from>d+)
-群";从":一个或多个数字s*-s*
-用零个或多个空格括起来的连字符- CCD_ 8-组";至":一个或多个数字
s*
-零个或多个空白digit(possible space?)-(possible space?)digit
0-固定字符串|
-或Alla dagars*(?<from>d+)s*-s*(?<to>d+)
-固定字符串,零个或多个空白,组";从":一个或多个数字,一个用零个或更多个空格括起来的连字符,组";至":一个或多个数字