正则表达式:如何匹配两个可选分隔符间的内容且不包含分隔符
正则匹配问题解决方案
你的需求是从以下四种格式的字符串中提取出exampleline:
/exampleline→ 提取examplelineexampleline→ 提取examplelineexampleline/→ 提取exampleline/exampleline/→ 提取exampleline
你之前用的?\/(.+)\/?失效,核心原因是.+属于贪婪匹配,它会尽可能抓取最多字符。比如面对/exampleline/时,.+会直接匹配到字符串末尾的/,后面的\/?是可选规则,贪婪模式会直接忽略它,最终捕获到exampleline/而非目标内容。
这里给你两个可行的解决方案:
方案1:非贪婪匹配
用非贪婪量词+?限制匹配范围,正则表达式写成:
^\/?(.+?)\/?$
^和$限定整个字符串的首尾,避免匹配片段内容\/?匹配可选的开头斜杠(.+?)非贪婪匹配中间内容(遇到第一个结尾斜杠就停止)\/?匹配可选的结尾斜杠
方案2:排除斜杠匹配(更高效)
直接匹配除斜杠外的所有字符,避免贪婪/非贪婪的回溯问题,正则表达式写成:
^\/?([^\/]+)\/?$
[^\/]+表示匹配1个或多个非斜杠的字符,从根本上杜绝捕获斜杠的可能- 其余规则和方案1一致
这两个正则都能准确匹配你列出的四种场景,完美提取目标内容。
内容的提问来源于stack exchange,提问作者Platon
相关产品推荐
相关产品推荐

