GVKun编程网logo

php – 正则表达式和可分性(php正则表达式实例)

8

对于想了解php–正则表达式和可分性的读者,本文将是一篇不可错过的文章,我们将详细介绍php正则表达式实例,并且为您提供关于grep、正则表达式和扩展正则表达式的理解及运用、js正则表达式和php正则

对于想了解php – 正则表达式和可分性的读者,本文将是一篇不可错过的文章,我们将详细介绍php正则表达式实例,并且为您提供关于grep、正则表达式和扩展正则表达式的理解及运用、js正则表达式和php正则表达式有什么区别、Linux 基础正则表达式和扩展正则表达式、OSIX基本正则表达式和扩展正则表达式的比较的有价值信息。

本文目录一览:

php – 正则表达式和可分性(php正则表达式实例)

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、正则表达式和扩展正则表达式的理解及运用

一 、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

使用此命令结果如下

wKiom1PA60Oh4K58AAI1IyyaKo8011.jpg

2、显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行

# grep “[0-9]” /etc/inittab


wKioL1PA6yeDaBlrAAEdq7K9TBA569.jpg

三、扩展正则表达式

扩展正则表达式是对基础正则表达式添加了几个特殊构成的

语法格式:

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

wKiom1PA62SyAqCiAAE88ShMgAo793.jpg

js正则表达式和php正则表达式有什么区别

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 基础正则表达式和扩展正则表达式

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基本正则表达式和扩展正则表达式的比较

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基本正则表达式和扩展正则表达式的比较的相关知识,请在本站进行查询。

本文标签: