php regexp:can';不排除一个元素
我正在尝试设置一个相当复杂的regexp,但我无法从not match列表中仅避免一个元素 我的正则表达式是:php regexp:can';不排除一个元素,php,regex,Php,Regex,我正在尝试设置一个相当复杂的regexp,但我无法从not match列表中仅避免一个元素 我的正则表达式是: 1234567-8_abc((?!_ABC|_DEFGHI)[\w]?)*(\.ios|\.and) 我必须排除的是: 1234567-8_abc.ios 1234567-8_abc_DEFGHI.ios 1234567-8_abc_abc.ios 相反,我必须包括: 1234567-8_abc_1UP.ios 1234567-8_abc_FI.ios 1234567-8_ab
1234567-8_abc((?!_ABC|_DEFGHI)[\w]?)*(\.ios|\.and)
我必须排除的是:
- 1234567-8_abc.ios
- 1234567-8_abc_DEFGHI.ios
- 1234567-8_abc_abc.ios
- 1234567-8_abc_1UP.ios
- 1234567-8_abc_FI.ios
- 1234567-8_abc_gmg.ios
- 1234567-8_abc_1UP和
- 1234567-8_abc_FI和
- 1234567-8_abc_gmg和
- 1234567-8_abc_ddd和
- 1234567-8_abc_qwert.ios
- 1234567-8_abc_88.ios
谢谢大家! 添加一个如下所示的负前瞻
1234567-8_abc(?!_ABC|_DEFGHI)\w+(\.ios|\.and)
(?!\u ABC|u DEFGHI)
反向前瞻断言\u ABC
后面的字符串不会是\u ABC
或\u DEFGHI
。并且它必须在.ios
或和
之前有一个或多个单词字符。因此它与这个1234567-8_abc.ios
字符串不匹配。这个正则表达式与PHP中的示例匹配:
1234567-8_abc_((?!ABC|DEFGHI)[\w]?)*(\.ios|\.and)
您可以使用以下模式:
1234567-8_abc_[^_.]++(?<!_ABC|_DEFGHI)\.(?:ios|and)
1234567-8_abc.[^.]++(?)?
注意:我假设\uuu
和.ios
之间的每个子字符串不包含点或下划线
必须使用++
,以减少可能的回溯步骤,从而更快地失败
1234567-8_abc(?:(?!_ABC|_DEFGHI)\w)+(\.ios|\.and)
尝试此操作。您的正则表达式在1234567-8_abc
可选之后保留了\w
。只是将其设置为强制。请参阅演示
只是一个小提示:[\w]
可以是\w
。