对于想了解php–正则表达式和可分性的读者,本文将是一篇不可错过的文章,我们将详细介绍php正则表达式实例,并且为您提供关于grep、正则表达式和扩展正则表达式的理解及运用、js正则表达式和php正则
对于想了解php – 正则表达式和可分性的读者,本文将是一篇不可错过的文章,我们将详细介绍php正则表达式实例,并且为您提供关于grep、正则表达式和扩展正则表达式的理解及运用、js正则表达式和php正则表达式有什么区别、Linux 基础正则表达式和扩展正则表达式、OSIX基本正则表达式和扩展正则表达式的比较的有价值信息。
本文目录一览:- php – 正则表达式和可分性(php正则表达式实例)
- grep、正则表达式和扩展正则表达式的理解及运用
- js正则表达式和php正则表达式有什么区别
- Linux 基础正则表达式和扩展正则表达式
- OSIX基本正则表达式和扩展正则表达式的比较
php – 正则表达式和可分性(php正则表达式实例)
如何创建一个正则表达式来测试一个数字是否可以被i整除(2< = i< = 10),总共有8个表达式?人们只能假设整数是正数.您可以使用符号[]和[^],?,*和,|和(). PHP的ereg函数应该接受它.
解决方法:
除非这是一个家庭作业问题,否则在这种情况下没有理由使用正则表达式.
使用模数运算符,它为您提供剩余的值除以.
if($number%$i) { "This runs if $number modulus is not 0 (not evenly divisible by $i)" }
else { "This runs if $number modulus is 0 ( evenly Divisible by $i)" }
编辑:哦,这是一个面试问题.是的,这里的正确答案是“这不是解决这个问题的正确工具!”
grep、正则表达式和扩展正则表达式的理解及运用
grep、正则表达式和扩展正则表达式的理解及运用
一 、grep的基本含义
我们可以从命令man grep中看到gerp命令的帮助文档,从中我们可以得出grep、egrep、fgrep都是文本搜索工具,根据用户指定的文本模式(搜索条件)对目标文件进行逐行搜索,显示能匹配到的。
grep有三种变形:
grep:标准grep命令,支持基本正则表达式
egrep:扩展grep命令,支持基本及扩展的正则表达式
fgrep:fastgrep,它把所有的字母都看作单词,即正则元字符不再特殊,而仅仅表示其自身的字母意思
grep使用语法格式为:
grep [option]...'PATTERN' FILE...
grep [选项] …’基本正则表达式’ [文件]…
使用双引号:字符串参数最好使用双引号扩起来,一是以防被误解为shell命令,二是可以用来查找多个单词组成的字符串,在调用变量的时候也要使用双引号,比如grep"$MYVAR",否则无结果,在调用模式匹配是,应使用单引号
grep常用选项:
-v: 反向选取
-o:仅显示匹配的字串,而非字串所在的行
-i:ignore-case,忽略字符大小写
-E:支持使用扩展正则表达式
二、grep和正则表达式
正则表达式含义:是一类字符所书写的模式,其中许多字符不表示其字面意义,而是表达控制或通配等功能。正则表达式中包含元字符,元字符是指不表示其字面意义,而用于额外功能性描述。
基本正则表达式的元字符:
字符匹配:
.: 匹配任意单个字符
[]: 匹配指定范围内的任意单个字符
[0-9],[[:digit:]]:指包含数字字符
[a-z],[[:lower:]]:指包含小写字符
[A-Z],[[:upper:]]:指包含大写字符
[[:space:]]:指空白字符
[[:punct:]]:指特殊字符 标点符号等
[[:alpha:]]:指包含所有的大小写字符
[[:alnum:]]:指包含所有的大小写字符和数字字符
[^]:匹配一个不在指定范围内的字符
次数匹配元字符:用于实现指定其前面的字符所能够出现的次数
*: 任意长度,它前面的字符可以出现任意次
\?: 0次或1次,它前面的字符是可有可无的
\{m\}: m次,它前的字符要出现m次
\{m,n\}: 至少m次,至多n次
\{m,\}: 至少m次
位置锚定:
^:行首锚定:指写在模式最左侧
$:行尾锚定:指写在模式最右侧
^$:指空白行
不包含特殊字符的连续字符组成的串叫单词:
\<:词首,出现于单词左侧,\b
\>:词尾,出现于单词右侧,\b
分组引用:
\(\):分组
\#: 引用第n个 括号所匹配到的内容,而非模式本身
示例:
1、显示/etc/passwd中以nologin结尾的行
# grep nologin$ /etc/passwd
使用此命令结果如下
2、显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行
# grep “[0-9]” /etc/inittab
三、扩展正则表达式
扩展正则表达式是对基础正则表达式添加了几个特殊构成的
语法格式:
grep -E ‘表达式‘文件…
grep -E'PATTERN' FILE...
egrep‘表达式‘ 文件…
egrep 'PATTERN' FILE...
扩展正则表达式的元字符:
字符匹配:
.: 匹配任意单个字符
[]: 匹配指定范围内的任意单个字符
[0-9],[[:upper:]]:指包含大写字符
[[:space:]]:指空白字符
[[:punct:]]:指特殊字符 标点符号等
[[:alpha:]]:指包含所有的大小写字符
[[:alnum:]]:指包含所有的大小写字符和数字字符
[^]:匹配一个不在指定范围内的字符
次数匹配元字符:用于实现指定其前面的字符所能够出现的次数
*: 任意长度,它前面的字符可以出现任意次
\?: 0次或1次,它前面的字符是可有可无的
\{m\}: m次,它前的字符要出现m次
\{m,\}: 至少m次
位置锚定:
^:行首锚定:指写在模式最左侧
$:行尾锚定:指写在模式最右侧
^$:^$,^[[:space:]]*$ 指空白行
不包含特殊字符的连续字符组成的串叫单词:
\<:词首,出现于单词左侧\b
\>:词尾,出现于单词右侧\b
分组引用:
\(\):分组
\#: 引用第n个 括号所匹配到的内容,而非模式本身
或者:
|:表示或者
例:
A|B:A或者B
示例:
1、显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行
# grep -E "^[[:space:]]{1,}.*"/boot/grub/grub.conf
js正则表达式和php正则表达式有什么区别
区别:1、PHP正则表达式支持“(?<!”和“(?<=”断言,而js正则表达式不支持;2、PHP正则表达式支持子组“(?R)”,而js正则表达式不支持;3、PHP正则表达式支持本地编码,js只支持unicode。
本教程操作环境:Windows10系统、javascript1.8.5&&PHP7.1版、Dell G3电脑。
js正则表达式和PHP正则表达式有什么区别
总体上,PHP的正则比标准javascript的要强大。
PHP有两套正则库,一是posix兼容库(PHP5.3之前版本可用),二是perl兼容库(主力库)
perl兼容库中支持而js正则不支持的:
1、支持(?<!和(?<=回程断言
2、许多预置字符类(:alnum:)
3、支持组标识(?<>
4、支持子组同名(?|
5、支持独立子组(?>
6、支持条件子组(?()
7、支持递归子组(?R)
8、支持本地编码,js只支持unicode
9、修正器更多
10、等等等等细节上的丰富。
总之,js的正则库在PHP正则面前显得只是一个简约的基础库。
相关推荐:javascript学习教程、PHP教程
Linux 基础正则表达式和扩展正则表达式
基础正则表达式:
^ 第 1 个符号,以什么什么开头 ^m
$ 第 2 个符号,以什么什么结尾 m$ ,还表示空行,或空格,可以用 cat -An 试一下
^$ 第 3 个符号,空行 什么符号都没有
. 第 4 个符号,表示任意 “一个字符”
\ 第 5 个符号, 转义字符不解析特殊符号的含义 , \n 相当于回车键 , \t 相当于 tab 键
* 第 6 个符号,表示前一个字符连续出现了 0 次或 0 次以上
.* 第 7 个符号,表示任意字符,包括空行,正则表达式表示所有或连续出现的。
[ ] 第 8 个符号,中括号,中括号内每次查找一个字符。
[^] 第 9 个符号,[^acb] , 表示排除 a,b,c
扩展正则表达式:
+ 第 10 个符号,表示前一个字母连续出现 1 次或 1 次以上
扩展正则表达式:
+ 第 10 个符号,表示前一个字母连续出现 1 次或 1 次以上
| 第 11 个符号,(竖线)表示 "或者" 的意思
() 第 12 个符号,(小括号)表示一个整体 反向引用 / 后向引用
例如:sed -r ''s#(..)(..)(..)#\1<(\2)>\3#g'' ## 后向引用
{} 第 13 个符号,{n,m} 前一个字符至少连续出现 N 次,最多连续出现 m 次
a {1,10} ## 表示 a 最少连续出现 1 次,最多连续出现 10 次
grep 参数:
-E 等于 egerp
-n 显示行号
-i 不区分大小写
-o 只输出匹配的内容
sed 参数:
-n 指定行号
-r 支持扩展正则表达式
''s#123#456#g'' 表示把 123 替换成 456
awk 参数:
-F 指定分隔符
NR 表示行号
$ 表示取某一列
练习题 1:用 sed 或 awk 取出服务器 eth0 的 IP 地址。
1、用 sed 取出服务器 eth0 的 ip 地址
[root@MB-10-0-0-200 ~]# ifconfig eth0 ### 查看服务器的 IP
eth0 Link encap:Ethernet HWaddr 00:0C:29:FB:AD:B8
inet addr:192.168.11.138 Bcast:192.168.11.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fefb:adb8/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6661195 errors:0 dropped:0 overruns:0 frame:0
TX packets:6770 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:8342856346 (7.7 GiB) TX bytes:1103955 (1.0 MiB)
[root@MB-10-0-0-200 ~]# ifconfig eth0|sed -nr ''2s#^.*addr:(.*).*Bcast.*$#\1#gp'' ### \1 表示前一个()内的内容,就是我们要取出的内容
192.168.11.138
############### 备注 ######################
|sed -nr ''2s#^.*addr:(.*).*Bcast.*$#\1#gp'' 等于 |sed -n 2p|sed -r''s#^.*addr:(.*).*Bcast.*$#\1#g''
#########################################
2、用 awk 取出服务器 eth0 的 ip 地址
[root@MB-10-0-0-200 ~]# ifconfig eth0 ### 查看服务器的 IP
eth0 Link encap:Ethernet HWaddr 00:0C:29:FB:AD:B8
inet addr:192.168.11.138 Bcast:192.168.11.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fefb:adb8/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6665321 errors:0 dropped:0 overruns:0 frame:0
TX packets:6772 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:8347065816 (7.7 GiB) TX bytes:1104075 (1.0 MiB)
[root@MB-10-0-0-200 ~]# ifconfig eth0|awk -F ''[ :]+'' ''NR==2 {print $4}'' ### 注意:''[ :]'' 中括号内一个字符是空格!!!
192.168.11.138
############### 备注 ######################
|awk -F ''[:]+'' ''NR==2 {print $4}'' 等于 |awk NR==2|awk -F ''[ :]+'' ''{print $4}''
#########################################
练习题 2:用 awk 或 sed 取出 /etc/hosts 文件的权限(以数字的形式显示)
1、用 awk 取 /etc/hosts 文件的权限
[root@MB-10-0-0-200 ~]# stat /etc/hosts #### 首先查看 hosts 文件的权限,权限为:0644
File: `/etc/hosts''
Size: 476 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 786460 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-04-05 17:00:16.938264330 +0800
Modify: 2018-04-05 16:59:22.926263885 +0800
Change: 2018-04-05 16:59:22.926263885 +0800
[root@MB-10-0-0-200 ~]# stat /etc/hosts|awk -F ''[(/]'' ''NR==4 {print $2}'' ### 以(和 / 为分隔符,将第四行的第二列取出
0644
############### 备注 ######################
|awk -F ''[(/]'' ''NR==4 {print $2}'' 等于 |awk NR==4|awk -F ''[(/]'' ''{print $2}''
#########################################
2、用 sed 取 /etc/hosts 文件的权限
[root@MB-10-0-0-200 ~]# stat /etc/hosts #### 首先查看 hosts 文件的权限,权限为:0644
File: `/etc/hosts''
Size: 476 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 786460 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-04-05 17:00:16.938264330 +0800
Modify: 2018-04-05 16:59:22.926263885 +0800
Change: 2018-04-05 16:59:22.926263885 +0800
[root@MB-10-0-0-200 ~]# stat /etc/hosts|sed -nr ''4s#^.*\((''[0-9]+'')/-.*$#\1#gp'' ### \1 表示前一个()内的内容,就是我们要取出的内容
0644 ### \( 表示取消 ( 的特殊含义
############### 备注 ######################
|sed -nr ''4s#^.*\((''[0-9]+'')/-.*$#\1#gp'' 等于 |sed -n 4p|sed -r''s#^.*\((''[0-9]+'')/-.*$#\1#g''
#########################################
OSIX基本正则表达式和扩展正则表达式的比较
POSIX基本正则表达式和扩展正则表达式的比较
在读者正觉得正则表达式已经复杂得不能再复杂时,又会发现POSIX规范将正则表达式的实现方法分为了两种:基本正则表达式(BRE)和扩展正则表达式(ERE)。到目前为止,我们所讨论的正则表达式的所有特性,都得到了兼容POSIX的应用程序的支持,并且都是以BRE的方式实现。grep命令就是这样的一个例子。
BRE和ERE到底有什么区别?其实仅仅是元字符的不同!在BRE方式中,只承认^ 、$、 . 、[ 、] 、*这些是元字符,所有其他的字符都被识别为文字字符。而ERE中,则添加了(、 ) 、{ 、} 、?、 + |、等元字符(及其相关功能)。
然而(也是有趣的部分),只有在用反斜杠进行转义的情况下,字符(、)、{、}才会在BRE被当作元字符处理,而ERE中,任何元符号前面加上反斜杠反而会使其被当作文字字符来处理。
由于下面要讨论的特性是ERE的一部分,所以需要使用不一样的grep。传统上,这是由egrep程序来执行的,但是GNU版本的grep可以运用-E选项以支持ERE方式。
今天的关于php – 正则表达式和可分性和php正则表达式实例的分享已经结束,谢谢您的关注,如果想了解更多关于grep、正则表达式和扩展正则表达式的理解及运用、js正则表达式和php正则表达式有什么区别、Linux 基础正则表达式和扩展正则表达式、OSIX基本正则表达式和扩展正则表达式的比较的相关知识,请在本站进行查询。
本文标签: