正则表达式 - 设置减法
Regex - sets subtraction
我必须找到所有以 //MARK 开头但不包含字符串 ABCDS 的字符串。
我有一些尝试,但都失败了。这里最大的问题是标记集合A-B。
(\/\/[ ]*MARK[ \t]*[:]*[ \t]*[^\n(?P=ABCD)]*)
它应该适用于:
//MARK: MarABdasdsd
//MARK sthIsHere
但不应该匹配:
//MARK: great marABCDE
我能找到所有案例,但不知道如何删除这个案例。我只能使用单个正则表达式。
我知道很多帖子
有什么想法吗?
我假设您在使用 ICU 正则表达式风格的 Swift 中编码。它支持前瞻,因此,基于调节贪婪标记的正则表达式将起作用:
//[ ]*MARK[ \t]*:*[ \t]*(?:(?!ABCD)[^\n])*$
正则表达式匹配
//
- 两个 /
[ ]*
- 0+ 个空格
MARK
- 一个字面词 MARK
[ \t]*:*[ \t]*
- 0+ 个空格或制表符后跟 0+ 个冒号后跟 0+ 个制表符或空格
(?:(?!ABCD)[^\n])*
- 匹配任何不开始 ABCD
序列 的非换行符的调节贪婪标记
$
- 字符串结尾。
我必须找到所有以 //MARK 开头但不包含字符串 ABCDS 的字符串。 我有一些尝试,但都失败了。这里最大的问题是标记集合A-B。
(\/\/[ ]*MARK[ \t]*[:]*[ \t]*[^\n(?P=ABCD)]*)
它应该适用于:
//MARK: MarABdasdsd
//MARK sthIsHere
但不应该匹配:
//MARK: great marABCDE
我能找到所有案例,但不知道如何删除这个案例。我只能使用单个正则表达式。
我知道很多帖子
有什么想法吗?
我假设您在使用 ICU 正则表达式风格的 Swift 中编码。它支持前瞻,因此,基于调节贪婪标记的正则表达式将起作用:
//[ ]*MARK[ \t]*:*[ \t]*(?:(?!ABCD)[^\n])*$
正则表达式匹配
//
- 两个/
[ ]*
- 0+ 个空格MARK
- 一个字面词MARK
[ \t]*:*[ \t]*
- 0+ 个空格或制表符后跟 0+ 个冒号后跟 0+ 个制表符或空格(?:(?!ABCD)[^\n])*
- 匹配任何不开始ABCD
序列 的非换行符的调节贪婪标记
$
- 字符串结尾。