求可匹配含至少一个星号的所有单词的Regex模式
嘿,我来帮你构建符合需求的正则表达式!你需要匹配任意位置包含至少一个星号(*)的单词,包括全星号的情况,还有带撇号的比如t*eir's这类。
核心正则模式
(?<!\S)[^\s]*[*]+[^\s]*(?!\S)
模式解释
让我拆解一下这个模式的各个部分,帮你理解它的作用:
(?<!\S):这是一个负向后环视,确保当前位置的前面不是非空白字符(也就是前面要么是字符串开头,要么是空白字符),用来界定单词的起始边界。[^\s]*:匹配任意数量(包括0个)的非空白字符,这部分是星号前面的内容,可以是空(比如*pp这种开头就是星号的情况)。[*]+:匹配至少一个星号,这是我们的核心匹配条件,确保单词里至少有一个*。[^\s]*:匹配任意数量(包括0个)的非空白字符,对应星号后面的内容,可以是空(比如locall*这种结尾是星号的情况,或者全星号的****)。(?!\S):这是一个负向前环视,确保当前位置的后面不是非空白字符(也就是后面要么是字符串结尾,要么是空白字符),用来界定单词的结束边界。
验证示例
这个模式可以完美匹配你给出的所有目标单词:
t*e✅*pp✅locall*✅q**st*on✅**stinct✅*ro*✅t*eir's✅*ev***heles*✅****✅
如果你的“单词”定义是基于传统的单词字符(比如仅字母、撇号,不含其他特殊字符),也可以调整成更严格的版本:
(?<!\S)[a-zA-Z']*[*]+[a-zA-Z']*(?!\S)
这个版本会只允许星号前后是字母或撇号,排除其他非空白的特殊字符。
内容的提问来源于stack exchange,提问作者Andre Elrico
相关产品推荐
相关产品推荐

