基础 - 匹配指定范围

  • 作者:KK

  • 发表日期:2017.6.10


要点速读

  1. 文章标题是为了通俗易懂才叫范围,其实在正则里的概念叫区间,我们叫区间匹配

  2. [2-5]可以匹配1到5的数字,但不匹配1、6到9,而[0-9]表示所有数字

  3. 区间其实就是用方括号[ ]然后在里面用起止的形式描述一个内容区间

  4. [a-d]表示匹配a、b、c、d四个字母,但通常我们要匹配全部字母,所以直接[a-z]

  5. [a-zA-Z]才能匹配所有大小字母,上面只能匹配小写字母而已,当然只要匹配大写的话只用[A-Z]也可以

  6. [0-9a-zA-Z]这样一共指定了3个区间,表示匹配数字、大小写字母

  7. [8!?xq]这样就指定匹配这5个字符,它没们有声明开始字符-结束字符,所以都视为独立声明,一共是5个字符,其它不匹配


JS代码

//一个或多个 3到8 的数字
console.log('20438y'.match( /[3-8]+/ )[0]); // 438
console.log('204398y'.match( /[3-8]+/ )[0]); // 43    因为3后面被9中断了
console.log('204398y'.match( /[3-8]+/g )); // 43  8   全局匹配模式才能匹配 43 和 8 ,因为被9隔开了

console.log('20438y'.match( /[0-9]+/ )[0]); // 20438
console.log('20438y'.match( /[a-z]+/ )[0]); // y
console.log('20438y'.match( /[A-Z]+/ )); // null
console.log('20438y'.match( /[xz]+/ )); // null  因为只要字母x和z

//匹配 英数字下划线 的账号部分
console.log('小芳,请加我微信 Marco_123'.match( /[0-9a-zA-Z_]+/ )[0]); // Marco_123

PHP代码

//一个或多个 3到8 的数字
preg_match('#[3-8]+#', '20438y', $matchResult1);
preg_match('#[3-8]+#', '204398y', $matchResult2);
preg_match_all('#[3-8]+#', '204398y', $matchResult3);

preg_match('#[0-9]+#', '20438y', $matchResult4);
preg_match('#[a-z]+#', '20438y', $matchResult5);
preg_match('#[A-Z]+#', '20438y', $matchResult6);
preg_match('#[xz]+#', '20438y', $matchResult7);

//匹配 英数字下划线 的账号部分
preg_match('#[0-9a-zA-Z_]+#', '小芳,请加我微信 Marco_123', $matchResult8);

header('Content-type:text/plain');
print_r([
	$matchResult1[0], // 438
	$matchResult2[0], // 43
	$matchResult3, // 43 8
	
	$matchResult4[0], // 20438
	$matchResult5[0], // y
	$matchResult6, // 空数组,失败
	$matchResult7, // 空数组,失败
	
	$matchResult8[0], // Marco_123
]);