Products
GG网络技术分享 2025-03-18 16:15 10
<?php
$str = 'This is an example!';
$preg = '/\\b\\w{2}\\b/';
$num1 = preg_match($preg,$str,$str1);
echo $num1.'<br>';
var_dump($str1);
$num2 = preg_match_all($preg,$str,$str2);
echo '<br>'.$num2.'<br>';
var_dump($str2);
?>
我知道\\b是单词分界符,\\w是任意一个字符,{2},是匹配两次,这个正则表达式我理解的是匹配到任意2个重复的字符,比如可以匹配到aa、ee这样的字符串,但是$str1的输出结果是'is'。从输出结果看,是匹配到任意两个字符组合的重复,比如opisop,会匹配到op。希望大家能帮助我解释下这个正则表达式的意思。
{2} 是前面的匹配规则重复2次,不是匹配结果重复2次。
\\w{2} 就等于 \\w\\w
2次匹配结果不必相同。
{2}就是匹配两次\\w, 不一定要相同。 aa 是两个字符,is 也是两个字符 也是满足的
\\b是单词分界,\\w是任意英文字母或数字或_字符,
\\b\\w{2}\\b 这样就是要匹配两个英文字母左右两边都是单词分界的。
也就是匹配由两个英文字母组成的单词,结果就是 is 其实 an 也能匹配,只是你的程序只取第一个。
谢谢您的详细解释,我总算理解了,怪不得后面的an,用all能匹配到!
请问,如果是要匹配到任意两个连续的重复字母,应该怎样写表达式呢?
匹配重复字母需要先用括号()获取一个字母的子匹配结果,然后用 \\1 引用第1个子匹配的结果
/(\\w)\\1/
作者:极客小俊 一个专注于web技术的80后
我不用拼过聪明人,我只需要拼过那些懒人 我就一定会超越大部分人!
极客小俊@知乎,官方首发原创文章
博客: 极客小俊GeekerJun
preg_match() 和 preg_match_all() 都支持!
(?<name>),(?'name')以及 (?P<name>)了。 之前版本仅接受(?P<name>)方式 案例图: 意思就是取一个别名 其中P是固定的,但不是必须加的,可以不加P 语法: (?P<name>正则模式) 代码案例如下:
Demand feedback