如何精确匹配字符串中的所有单词,包括那些以 '!,?.'"' 结尾但不使用正则表达式与任何其他标点符号匹配的单词?
How do I exact match all the words in a string includes those ends with '!,?.'"' but do not match those with any other punctuation using regex?
比如我要搜索的模式是apple
我要搜索的字符串是
apple apple@323 apple.. apple??...!! apple??%% Ilovesapple
预期匹配:
apple
apple..
apple??...!!
我要匹配所有准确的单词,唯一的例外是单词以标点符号结尾
!,?.'"
这是你想要的吗?
\bapple[!,?.'\"]*(?=\s+|$)
详情:
\b
'apple' 的字边界
apple
您要搜索的图案
[!,?.'\"]*
您要匹配的末尾的特殊字符出现零次或多次
(?=\s+|$)
Positive Lookahead 以确保匹配词后跟白色 space 或行尾。
另一个版本
另一种可能性是,如果您在 'apple' 之前不允许任何非 space 字符:
(?:\s+|^)(apple[!,?.'\"]*)(?=\s+|$)
Regex Demo 注意 @apple?
不匹配,因为它以 @
开头
比赛参考Group 1
详情:
(?:\s+|^)
白色的非捕获组 space(s) 或 'apple'
之前的行首
(
捕获组开始(捕获到第 1 组)
apple
您要搜索的图案
[!,?.'\"]*
您要匹配的末尾的特殊字符出现零次或多次
)
捕获组结束(捕获到第1组)
(?=\s+|$)
Positive Lookahead 以确保匹配词后跟白色 space 或行尾。
比如我要搜索的模式是apple
我要搜索的字符串是
apple apple@323 apple.. apple??...!! apple??%% Ilovesapple
预期匹配:
apple
apple..
apple??...!!
我要匹配所有准确的单词,唯一的例外是单词以标点符号结尾
!,?.'"
这是你想要的吗?
\bapple[!,?.'\"]*(?=\s+|$)
详情:
\b
'apple' 的字边界
apple
您要搜索的图案[!,?.'\"]*
您要匹配的末尾的特殊字符出现零次或多次(?=\s+|$)
Positive Lookahead 以确保匹配词后跟白色 space 或行尾。
另一个版本
另一种可能性是,如果您在 'apple' 之前不允许任何非 space 字符:
(?:\s+|^)(apple[!,?.'\"]*)(?=\s+|$)
Regex Demo 注意 @apple?
不匹配,因为它以 @
比赛参考Group 1
详情:
之前的行首(?:\s+|^)
白色的非捕获组 space(s) 或 'apple'(
捕获组开始(捕获到第 1 组)apple
您要搜索的图案[!,?.'\"]*
您要匹配的末尾的特殊字符出现零次或多次
)
捕获组结束(捕获到第1组)(?=\s+|$)
Positive Lookahead 以确保匹配词后跟白色 space 或行尾。