如何编写正则表达式提取由两个点分隔(首个点可缺省)的字符串?
正则表达式提取中间字符串解决方案
你需要提取被两个点分隔的目标字符串,哪怕开头没有第一个点也能生效,之前写的正则/\.([^\.]+)\./因为强制要求前后都有点,所以只能匹配两个点都存在的情况。
示例场景
- 示例1:
源字符串:fwe4d.tobe-extracted.s4red
期望输出:tobe-extracted - 示例2:
源字符串:tobe-extracted.s4red
期望输出:tobe-extracted
修正后的正则方案
用非捕获组匹配「字符串开头或者一个点」,就能兼容开头有无点的两种情况:
$pattern = "/(?:^|\.)([^\.]+)\./";
正则解释
(?:^|\.):非捕获组,^匹配字符串开头,\.匹配单个点,二者选其一,用来定位目标内容的前边界([^\.]+):捕获组,匹配任意多个非点字符,这就是我们要提取的核心内容\.:匹配目标内容后的点,确定后边界
使用示例
// 处理示例1 preg_match($pattern, "fwe4d.tobe-extracted.s4red", $matches); echo $matches[1]; // 输出 tobe-extracted // 处理示例2 preg_match($pattern, "tobe-extracted.s4red", $matches); echo $matches[1]; // 输出 tobe-extracted
内容的提问来源于stack exchange,提问作者Jimski
相关产品推荐
相关产品推荐

