如何匹配指定区域含特定单词的字符串片段?正则表达式求助
正则匹配解决方案
问题分析
你用的正则((?=top).*radio\s\d{2}\s)\/\D*bottom\s\d{2}无法匹配第二个字符串,核心问题是它强制要求radio后面直接跟空格加两位数字,但第二个字符串里radio后是top而非数字,导致结构匹配失败。
正确正则表达式
要实现/之前同时包含top和radio(顺序不限),且仅匹配该区域内的两个词,同时匹配/后的bottom+数字结构,可用以下正则:
^(?=.*top)(?=.*radio).*\s\d{2}\s\/\D*bottom\s\d{2}$
正则说明
^:匹配字符串开头(?=.*top):正向前瞻,确保字符串中存在top(?=.*radio):正向前瞻,确保字符串中存在radio.*\s\d{2}\s:匹配任意内容,直到空格+两位数字+空格的结构(对应示例中的数字部分)\/:匹配分隔符/\D*bottom\s\d{2}:匹配/后的非数字内容,接着是bottom+空格+两位数字$:匹配字符串结尾
如果需要严格限制top和radio仅出现在/之前(防止/后出现这两个词时误匹配),可以用带负向前瞻的版本:
^(?=.*top)(?=.*radio)(?!.*\/.*top)(?!.*\/.*radio).*\s\d{2}\s\/\D*bottom\s\d{2}$
内容的提问来源于stack exchange,提问作者ddd
相关产品推荐
相关产品推荐

