如何编写正则表达式,避免匹配单词中间的jira(大小写不敏感)
正则匹配需求:区分单词首尾/完整的"jira"(大小写不敏感)
问题说明
需要编写正则表达式,匹配以下示例中s2和s3里的"jira"变体(大小写不敏感),但排除s1、s4、s5的情况——这三个里的"jira"被夹在单词中间,不符合要求。当前使用的((?i)jira).*\.java无法过滤掉中间的情况。
示例字符串
s1 = ghgJirafa/com/Activity.java s2 = /santel/data/jira/JiraSDK.java <- 匹配"jira"(存在于"jira"或"JiraSDK"中) s3 = /priv/data/configJira.java <- 匹配"Jira"(存在于"configJira"中) s4 = /data/privJiracom/config.java s5 = /a/data/conJiraig.java
明确匹配规则
ghgJirafa <- 不匹配,Jira处于单词中间 jira <- 匹配,jira是完整单词 JiraSDK <- 匹配,jira处于单词开头 configJira <- 匹配,Jira处于单词结尾 privJiracom <- 不匹配,Jira处于单词中间 conJiraig <- 不匹配,Jira处于单词中间
解决方案
核心思路是确保"jira"(大小写不敏感)要么是完整单词,要么处于单词的开头或结尾,通过单词边界+负向断言实现:
正则表达式
如果只匹配符合条件的"jira"本身:
(?i)(?:\bjira\b|(?<![a-z])jira|jira(?![a-z]))
如果需要结合.java后缀的完整路径匹配:
(?i)(?:\bjira\b|(?<![a-z])jira|jira(?![a-z])).*\.java
规则解释
(?i):开启大小写不敏感模式,覆盖Jira、JIRA、jira等所有大小写组合。\bjira\b:匹配独立的"jira"单词(前后为单词边界,比如路径中的单独jira目录)。(?<![a-z])jira:匹配"jira"作为单词开头的情况——断言"jira"前没有字母(大小写不敏感模式下,自动适配大写字母的情况)。jira(?![a-z]):匹配"jira"作为单词结尾的情况——断言"jira"后没有字母。
这个正则会精准命中s2和s3的符合条件的"jira",同时排除s1、s4、s5中被夹在单词中间的情况。
内容的提问来源于stack exchange,提问作者umvs
相关产品推荐
相关产品推荐

