关于PHP正则表达式中星号的问题
时间:2009-01-20
来源:互联网
正则表达式中 *号表示 重复0次或多次
+号表示 重复1次或多次
一般*号和+号用在表示多个重复字符 例如:
kkkkkkkk
用+表示号 k+
用*号表示 k*
一般情况下要被匹配的字符在符号的前面
现在我要问的是*号既然可以匹配0次 是不是就可以表示任意字符?
例如 a*e 匹配 abcde 但是 我发现 这个表达式却匹配了e 单个字符
现在被匹配的字符却在符号的后面[code] echo ereg_replace('a*e','[re]','abcde');[/code]输出 abcd[re]
而当我写出下面一个表达式时我更高不懂*这个符号是什么意思了..[code]echo ereg_replace('a*','[re]','abcde');[/code]输出 [re][re]b[re]c[re]d[re]e[re]
谁能解释下*号的用法·····谢谢了
+号表示 重复1次或多次
一般*号和+号用在表示多个重复字符 例如:
kkkkkkkk
用+表示号 k+
用*号表示 k*
一般情况下要被匹配的字符在符号的前面
现在我要问的是*号既然可以匹配0次 是不是就可以表示任意字符?
例如 a*e 匹配 abcde 但是 我发现 这个表达式却匹配了e 单个字符
现在被匹配的字符却在符号的后面[code] echo ereg_replace('a*e','[re]','abcde');[/code]输出 abcd[re]
而当我写出下面一个表达式时我更高不懂*这个符号是什么意思了..[code]echo ereg_replace('a*','[re]','abcde');[/code]输出 [re][re]b[re]c[re]d[re]e[re]
谁能解释下*号的用法·····谢谢了
作者: lk188 发布时间: 2009-01-20
1.
[php]echo ereg_replace("a","[re]","abcde");[/php]
输出:
[re]bcde
这里精确匹配一个a
2.
[php]
echo ereg_replace("a*","[re]","abcde");
[/php]
这句输出:
[re][re]b[re]c[re]d[re]e[re]
在这里我理解为:
abcde中首先匹配一个a,换成[re];接着匹配0个a,换成[re];接着是b;接着匹配0个a,换成[re];……
最后得到[re][re]b[re]c[re]d[re]e[re]
至于为什么0个a换成[re],个人理解需要了解ereg_replace函数一下。
3.
[php]
echo ereg_replace("a*e","[re]","abcde");
[/php]
输出:
abcd[re]
此处abcde中e满足:0个a1个e的匹配,所以换成abcd[re]
4.
综上可以了解在ereg_replace函数中,字符和字符之间存在着“没有字符”,即对于代码
[php]
echo ereg_replace("1*","[re]","abcde");[/php]
来说,输出为:
[re]a[re]b[re]c[re]d[re]e[re]
则说明“没有字符”匹配了"1*"
而对于代码
[php]
echo ereg_replace("1+","[re]","abcde");[/php]
来说,因为没有匹配至少一个1的字符串在abcde中,所以输出为:
abcde
不知道这样的回答是否令你满意。个人理解,仅供参考。
[php]echo ereg_replace("a","[re]","abcde");[/php]
输出:
[re]bcde
这里精确匹配一个a
2.
[php]
echo ereg_replace("a*","[re]","abcde");
[/php]
这句输出:
[re][re]b[re]c[re]d[re]e[re]
在这里我理解为:
abcde中首先匹配一个a,换成[re];接着匹配0个a,换成[re];接着是b;接着匹配0个a,换成[re];……
最后得到[re][re]b[re]c[re]d[re]e[re]
至于为什么0个a换成[re],个人理解需要了解ereg_replace函数一下。
3.
[php]
echo ereg_replace("a*e","[re]","abcde");
[/php]
输出:
abcd[re]
此处abcde中e满足:0个a1个e的匹配,所以换成abcd[re]
4.
综上可以了解在ereg_replace函数中,字符和字符之间存在着“没有字符”,即对于代码
[php]
echo ereg_replace("1*","[re]","abcde");[/php]
来说,输出为:
[re]a[re]b[re]c[re]d[re]e[re]
则说明“没有字符”匹配了"1*"
而对于代码
[php]
echo ereg_replace("1+","[re]","abcde");[/php]
来说,因为没有匹配至少一个1的字符串在abcde中,所以输出为:
abcde
不知道这样的回答是否令你满意。个人理解,仅供参考。
作者: casual0402 发布时间: 2009-01-22
顶楼上的来了回复:你看一下《精通正则表达》一书的第四章“表达式匹配原理”。
这里有两原则:
1. 优先选择最左端的匹配结果。
2.标准的匹配量词(*,+,?,{m,n}是匹配优先的。
这里有两原则:
1. 优先选择最左端的匹配结果。
2.标准的匹配量词(*,+,?,{m,n}是匹配优先的。
作者: cnkiller 发布时间: 2009-01-25
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28