php正则表达式语法大全

正则表达式:元字符

元字符是在正则表达式中具有特殊含义的符号或字符。

元字符的处理视以下情况而异:

  • 正则表达式是与 SIMILAR TO 或 REGEXP 搜索条件一起使用,还是与 REGEXP_SUBSTR 函数一起使用

  • 元字符是否在正则表达式的字符类的内部

在继续之前,应了解字符类的定义。字符类是一组括在方括号内的字符,将根据这组字符对字符串中的字符进行匹配。例如,在 SIMILAR TO 'ab[1-9]' 语法中,[1-9] 就是一个字符类,它与 1 到 9 范围中(包括 1 和 9)的某一数字匹配。正则表达式中元字符的处理方式各不相同,这取决于元字符是否被放在字符类的内部。具体来说,当元字符放在字符类的内部时,多数元字符作为常规字符来处理。

对于 SIMILAR TO(仅限于 SIMILAR TO),元字符 *、?、+、_、|、(、)、{ 必须在字符类内进行转义。

要在字符类中包括减号 (-)、脱字符 (^) 或直角方括号 (]) 字符,必须将字符转义。

下面给出了所支持的正则表达式元字符的列表。当 SIMILAR TO、REGEXP 和 REGEXP_SUBSTR 使用元字符时,几乎所有元字符的处理方式都相同:

字符

其它信息
[ 和 ]

左右方括号用于指定字符类。字符类是进行匹配时所要依据的一组字符。

除连字符 (-) 和脱字符 (^) 外,在字符类中指定的元字符和量词(如 * 和 {m},分别为元字符和量词)没有特殊意义,可当作实际字符进行运算。

SQL Anywhere 还支持子字符类,例如 POSIX 字符类。请参见正则表达式:特殊子字符类。

*星号可用于与字符匹配 0 次或多次。例如,REGEXP '.*abc' 匹配的字符串以 abc 结尾并以任何前缀开头。因此,aabc、xyzabc 和 abc 匹配,但 bc 和 abcc 则不匹配。
?问号可用于与字符匹配 0 次或 1 次。例如,'colou?r' 匹配 color 和 colour。
+加号可用于与字符匹配 1 次或多次。例如,'bre+' 匹配 bre 和 bree,但不匹配 br。
-

可以在字符类中使用一个连字符来表示一个范围。例如,REGEXP '[a-e]' 匹配 a、b、c、d 和 e。

有关 REGEXP 和 SIMILAR TO 如何对范围求值的详细信息,请参见LIKE、REGEXP 和 SIMILAR TO:字符比较上的差异。

%

百分号可与 SIMILAR TO 配合使用来匹配任意数目的字符。

不将百分号视为 REGEXP 和 REGEXP_SUBSTR 所使用的元字符。当指定时,它匹配百分号 (%)。

_(下划线字符)

可将下划线与 SIMILAR TO 配合使用来匹配单个字符。

不将下划线视为 REGEXP 和 REGEXP_SUBSTR 所使用的元字符。当指定时,它匹配下划线 (_)。

|

管道符号用于指定匹配字符串时要使用的替代模式。在由竖线分隔的一行模式中,竖线被解释为 OR,匹配过程从最左侧的模式开始,在找到第一个匹配项时停止。因此,您应按优先级的降序顺序列出模式。您可以指定任意数量的替代模式。

( 和 )当左括号和右括号用于正则表达式的各个组合部分时,它们为元字符。例如,(ab)* 匹配零个或多个 ab 的重复项。与使用数学表达式一样,您使用组合来控制正则表达式各部分的计算顺序。
{ 和 }

当左大括号和右大括号用于指定量词时,它们为元字符。量词指定一个模式要构成某个匹配所必须重复的次数。例如:

  • {m}   匹配某个字符正好 m 次。例如,'519-[0-9]{3}-[0-9]{4}' 匹配 519 地区号中的一个电话号码(假定数据按语法中定义的方式进行格式设置)。

  • {m,}   匹配某个字符至少 m 次。例如,'[0-9]{5,}' 匹配任何含有五个或更多数字的字符串。

  • {m,n}   匹配某个字符至少 m 次,但不超过 n 次。例如,SIMILAR TO '_{5,10}' 匹配任何含有 5 到 10(含 5 和 10)个字符的字符串。

 反斜线被用作元字符的转义字符。它也可被用于转义非元字符。
^

对于 REGEXP 和 REGEXP_SUBSTR,当脱字符在字符类的外部时,脱字符匹配字符串的开头字符。例如,'^[hc]at' 匹配 hat 和 cat,但只在字符串的开头。

当用在字符类内部时,以下行为适用:

  • REGEXP 和 REGEXP_SUBSTR   当脱字符为字符类中的第一个字符时,它与字符集中字符以外的任何字符匹配。例如,REGEXP '[^abc]' 匹配 a、b 或 c 以外的任何字符。

    如果脱字符不是方括号内的第一个字符,那么它匹配脱字符。例如,REGEXP_SUBSTR '[a-e^c]' 匹配 a、b、c、d、e 和 ^。

  • SIMILAR TO   对于 SIMILAR TO,脱字符被视作减号运算符。例如,SIMILAR TO '[a-e^c]' 匹配 a、b、d 和 e。

$

当与 REGEXP 和 REGEXP_SUBSTR 一起使用时,匹配字符串的结尾字符。例如,SIMILAR TO 'cat$' 匹配 cat,但不匹配 catfish。

当与 SIMILAR TO 一起使用时,它匹配问号。

.

当与 REGEXP 和 REGEXP_SUBSTR 一起使用时,匹配任何单个字符。例如,REGEXP 'a.cd' 匹配以 a 开头并以 cd 结尾的含有四个字符的任何字符串。

当与 SIMILAR TO 一起使用时,它匹配句点 (.)。

:

在字符集中使用冒号来指定子字符类。例如,'[[:alnum:]]'。

正则表达式:特殊子字符类

子字符类是嵌入到较大字符类中的特殊字符类。除了自定义字符类(在其中定义要匹配的字符集,例如,[abxq4] 将匹配字符集限制为 a、b、x、q 和 4)以外,SQL Anywhere 还支持子字符类,例如,大部分 POSIX 字符类。例如,[[:alpha:]] 表示所有大写和小写字母的集合。

REGEXP 搜索条件和 REGEXP_SUBSTR 函数支持下表中的所有语法约定,但 SIMILAR TO 搜索表达式不支持。SIMILAR TO 支持的约定在 SIMILAR TO 列中有一个 Y。

在 REGEXP 中,当使用 REGEXP_SUBSTR 函数时,可以使用脱字符对子字符类取非。例如,[[:^alpha:]] 匹配除字母字符以外的所有字符的集合。

子字符类 其它信息 SIMILAR TO
[:alpha:]

匹配当前归类中的大写和小写字母字符。例如,'[0-9]{3}[[:alpha:]]{2}' 匹配三个数字,后跟两个字母。

Y
[:alnum:]

匹配当前归类中的数字、大写和小写字母字符。例如,'[[:alnum:]]+' 匹配含有一个或多个字母和数字的字符串。

Y
[:digit:]

匹配当前归类中的数字。例如,'[[:digit:]-]+' 匹配含有一个或多个数字或横线的字符串。同样,'[^[:digit:]-]+' 匹配含有一个或多个不是数字或横线的字符的字符串。

Y
[:lower:]

匹配当前归类中的小写字母字符。例如,'[[:lower:]]' 不匹配 A,因为 A 为大写。

Y
[:space:]

匹配单个空格 (' ')。例如,以下语句搜索 Contacts.City 以查找任何名称为两个词的城市:

SELECT City FROM Contacts WHERE City REGEXP '.*[[:space:]].*'; 
Y
[:upper:]

匹配当前归类中的大写字母字符。例如,'[[:upper:]ab]' 与以下其中一项匹配:任何大写字母、a 或 b。

Y
[:whitespace:]

匹配一个空白字符,例如,空格、制表符、换页符和回车符。

Y
[:ascii:]

匹配任何七位的 ASCII 字符(0 到 127 之间的顺序值)。

 
[:blank:]

匹配一个空白区或水平制表符。

[[:blank:]] 等效于 [ t]。

 
[:cntrl:]

匹配顺序值小于 32 或字符值为 127 的 ASCII 字符(控制字符)。控制字符包括换行符、换页符、退格符,等等。

 
[:graph:]

匹配打印字符。

[[:graph:]] 等效于 [[:alnum:][:punct:]]。

 
[:print:]

匹配打印字符和空格。

[[:print:]] 等效于 [[:graph:][:whitespace:]]。

 
[:punct:]

匹配其中一个字符: !"#$%&'()*+,-./:;<=>?@[]^_`{|}~.

[:punct:] 子字符类不能包括当前归类中可用的非 ASCII 标点字符。

 
[:word:]

匹配当前归类中的字母、数字或下划线字符。

[[:word:]] 等效于 [[:alnum:]_]。

 
[:xdigit:]

匹配字符类 [0-9A-Fa-f] 中的字符。

 

正则表达式:所支持的其它语法约定

REGEXP 搜索条件和 REGEXP_SUBSTR 函数支持以下语法约定,同时它们假定反斜线为转义字符。而 SIMILAR TO 搜索表达式不支持这些约定。

正则表达式语法 名称和含义
xxx

匹配值为 xxx 的字符,其中 xxx 是任何八进制数字序列,0 是零。例如,134 匹配反斜线。

a

匹配报警字符。

A

用在字符集外部以便匹配字符串的开头。

等效于在字符集外部使用的 ^。

b

匹配退格字符。

B

匹配反斜线字符 ()。

cX

匹配已命名的控制字符。例如,cZ 代表 ctrl-Z。

d

匹配当前归类中的一个数字。例如,以下语句搜索 Contacts.Phone 以查找以 00 结尾的所有电话号码:

SELECT Surname, Surname, City, Phone FROM Contacts WHERE Phone REGEXP '\d{8}00'; 

d 既可用在字符类的内部也可用在字符类的外部,等效于 [[:digit:]]。

D

匹配数字以外的任何字符。它的作用与 d 正好相反。

D 既可用在字符类的内部也可用在字符类的外部,等效于 [^[:digit:]]。

在方括号内使用取非速记时请务必谨慎。[DS] 与 [^ds] 并不相同。后者匹配数字或空格以外的任何字符。所以它匹配 x,但不匹配 8。而前者匹配不是数字或不是空格(满足两个条件之一)的任何字符。因为数字不是空格,空格也不是数字,所以 [DS] 可以匹配任何字符、数字、空格或其它字符。

e

匹配转义字符。

E

将由 Q 启动的将元字符视为非元字符这一功能停止。

有关正则表达式元字符的列表,请参见正则表达式:元字符。

f

匹配换页符。

n

匹配换行符。

Q

将所有元字符视为非元字符,直到遇到 E。例如,Q[$E 等效于 [$。

有关正则表达式元字符的列表,请参见正则表达式:元字符。

r

匹配回车符。

s

匹配一个被视为白空格的空格或字符。例如,以下语句从 Products.ProductName 中返回名称中至少有一个空格的所有产品名:

SELECT Name FROM Products WHERE Name REGEXP '.*\s.*' 

s 既可用在字符类的内部也可用在字符类的外部,等效于 [[:whitespace:]]。请参见正则表达式:特殊子字符类。

S

匹配非白空格字符。它的作用与 d 正好相反,而等效于 [^[:whitespace:]]。

S 既可用在字符类的内部也可用在字符类的外部。请参见正则表达式:特殊子字符类。

在方括号内使用取非速记时请务必谨慎。[DS] 与 [^ds] 并不相同。后者匹配数字或空格以外的任何字符。所以它匹配 x,但不匹配 8。而前者匹配不是数字或不是空格(满足两个条件之一)的任何字符。因为数字不是空格,空格也不是数字,所以 [DS] 可以匹配任何字符、数字、空格或其它字符。

t

匹配水平制表符。

v

匹配垂直制表符。

w

匹配当前归类中的字母字符、数字或下划线。例如,以下语句从 Contacts.Surname 返回长度正好为七个字母数字字符的所有姓:

SELECT Surname FROM Contacts WHERE Surname REGEXP '\w{7}'; 

w 既可用在字符类的内部也可用在字符类的外部。请参见正则表达式:特殊子字符类。

等效于 [[:alnum:]_].。

W

匹配当前归类中字母字符、数字或下划线以外的任何字符。它的作用与 w 正好相反,而等效于 [^[:alnum:]_]。

在字符类的内部和外部都可使用此正则表达式。请参见正则表达式:特殊子字符类。

xhh

匹配值为 0xhh 的字符,其中 hh 最多为两个十六进制数字。例如,x2D 等效于一个连字符。

等效于 x{hh}。

x{hhh}

匹配值为 0xhhh 的字符,其中 hhh 最多为三个十六进制数字。

z 和 Z

匹配字符串结尾处的位置(而非字符)。

等效于 $。

正则表达式:断言

断言测试条件是否为真,并影响字符串中开始匹配的位置。断言不返回字符;最终匹配中不包括断言模式。REGEXP 搜索条件和 REGEXP_SUBSTR 函数支持这些断言模式。而 SIMILAR TO 搜索表达式不支持这些约定。

在尝试拆分字符串时,lookahead 和 lookbehind 断言对于 REGEXP_SUBSTR 将非常有用。例如,您可以通过执行以下语句返回 Customers 表的 Address 列中街道名称(不带街道编号)的列表:

SELECT REGEXP_SUBSTR( Street, '(?<=^\S+\s+).*$' ) FROM Customers; 

另一个示例:假定您想要使用正则表达式来验证口令是否符合某些规则。您可以使用类似于下面内容的零宽度断言:

IFpasswordREGEXP '(?=.*[[:digit:]])(?=.*[[:alpha:]].*[[:alpha:]])[[:word:]]{4,12}' MESSAGE 'Password conforms' TO CLIENT; ELSE MESSAGE 'Password does not conform' TO CLIENT; END IF 

当满足以下条件时,口令有效:

  • password 至少有一位数(零宽度肯定断言 [[:digit:]])

  • password 至少有两个字母字符(零宽度肯定断言 [[:alpha:]].*[[:alpha:]])

  • password 只含有字母数字字符或下划线字符 ([[:word:]])

  • password 最少含有 4 个字符,最多含有 12 个字符 ({4,12})

下表包含 SQL Anywhere 支持的断言:

语法 含义
(?=pattern)

肯定的 lookahead 零宽度断言   查看字符串中的当前位置是否紧跟着出现了 pattern,而 pattern 不会成为匹配字符串的一部分。'A(?=B)' 匹配后面跟有 B 的 A,但不使 B 成为匹配的一部分。

例如,SELECT REGEXP_SUBSTR( 'in new york city', 'new(?=\syork)'); 会返回子串 new,因为它后面紧跟着 ' york'(请注意 york 前面的空格)。

(?!pattern)

否定的 lookahead 零宽度断言   查看字符串中的当前位置是否没有 紧跟着出现 pattern,而 pattern 不会成为匹配字符串的一部分。所以,'A(?!B)' 匹配后面未跟着 B 的 A。

例如,SELECT REGEXP_SUBSTR('new jersey', 'new(?!\syork)'); 会返回子串 new。

(?<=pattern)

肯定的 lookbehind 零宽度断言   查看字符串中的当前位置是否前面紧挨着出现了 pattern,而 pattern 不会成为匹配字符串的一部分。所以,'(?<=A)B' 匹配前面紧挨着 A 的 B,但不使 A 成为匹配的一部分。

例如,SELECT REGEXP_SUBSTR('new york', '(?<=new\s)york'); 会返回子串 york。

(?<!pattern)

否定的 lookbehind 零宽度断言   查看字符串中的当前位置的前面是否没有 紧挨着出现 pattern,而 pattern 不会成为匹配字符串的一部分。

例如,SELECT REGEXP_SUBSTR('about york', '(?<!new\s)york'); 会返回子串 york。

(?>pattern)

所属关系局部子表达式   仅匹配与 pattern 匹配的剩余字符串的最大前缀。

例如,在 'aa' REGEXP '(?>a*)a' 中,(?>a*) 匹配(并消耗)aa,而决不仅仅是前导 a。因此,'aa' REGEXP '(?>a*)a' 的计算结果为 false。

(?:pattern)

非捕获块   该语法在功能上就等效于 pattern,是为实现兼容性而提供。

例如,在 'bb' REGEXP '(?:b*)b' 中,(?:b*) 匹配(并消耗)bb。但是,与所属关系局部子表达式不同,bb 中的最后一个 b 会被放弃,以允许整个匹配成功(即,允许与在非捕获块的外部找到的 b 匹配)。

同样,'a(?:bc|b)c' 匹配 abcc 和 abc。在匹配 abc 时,bc 中最后面的 c 会发生回溯,以便可以使用组外的 c 来使匹配成功。

(?#text)

用于注释。text 的内容会被忽略。

version="1.0" src="http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_likeurl?url=http%3A%2F%2Fwww.lao8.org%2Farticle_1437%2Fzhengze_yufadaquan&style=3&otype=like&showcount=1" scrolling="no" frameborder="0" allowtransparency="true" style="border-style: none; overflow: hidden; width: 130px; height: 30px;">

====================================================================================

 
介绍
 
       正则表达式,大家在开发中应该是经常用到,现在很多开发语言都有正则表达式的应用,比如javascript,java,.net,php等等,我今天就把我对正则表达式的理解跟大家唠唠,不当之处,请多多指教!
 
需要知道的术语——下面的术语你知道多少?
 
Δ   定界符
Δ   字符域
Δ   修饰符
Δ   限定符
Δ   脱字符
Δ   反向引用
Δ   惰性匹配
Δ   注释
Δ   零字符宽
 
定位
 
       我们什么时候使用正则表达式呢?不是所有的字符操作都用正则就好了,php在某些方面用正则反而影响效率。当我们遇到 复杂文本数据的解析时候,用正则是比较好的选择。
 
优点
 
      正则表达式在处理复杂字符操作的时候,可以 提高工作效率,也在一定程度 节省你的代码量
 
缺点
 
       我们在使用正则表达式的时候,复杂的正则表达式会加大代码的 复杂度,让人很 难理解。所以我们有的时候需要在正则表达式内部添加注释。
 
通用模式

 
 ¤ 定界符,通常使用 "/"做为定界符开始和结束,也可以使用"#"。
  什么时候使用"#"呢?一般是在你的字符串中有 很多"/"字符的时候,因为正则的时候这种字符需要转义,比如uri。
     使用"/"定界符的代码如下.
$regex = '/^http:\/\/([\w.]+)\/([\w]+)\/([\w]+)\.html$/i' ;
$matches = array();
 
if (preg_match($regex, $str, $matches)){
     var_dump($matches);
}
 
echo "\n" ;

    preg_match中的$matches[0]将包含与整个模式匹配的字符串。 

    使用"#"定界符的代码如下.这个时候对"/"就不转义!

$regex = '#^http://([\w.]+)/([\w]+)/([\w]+)\.html$#i' ;
$matches = array();
 
if (preg_match($regex, $str, $matches)){
     var_dump($matches);
}
 
echo "\n" ;

  ¤ 修饰符:用于改变正则表达式的行为。

     我们看到的('/^http:\/\/([\w.]+)\/([\w]+)\/([\w]+)\.html/i')中的最后一个"i"就是修饰符,表示忽略大小写,还有一个我们经常用到的是"x"表示忽略空格。

贡献代码:

  

$regex  = '/HELLO/' ;
$str  = 'hello word' ;
$matches  = array ();
 
if (preg_match( $regex , $str , $matches )){
     echo  'No i:Valid Successful!' , "\n" ;
}
 
if (preg_match( $regex . 'i' , $str , $matches )){
     echo  'YES i:Valid Successful!' , "\n" ;
}

 

  ¤ 字符域:[\w]用方括号扩起来的部分就是字符域。

  ¤ 限定符:如[\w]{3,5}或者[\w]*或者[\w]+这些[\w]后面的符号都表示限定符。现介绍具体意义。

     {3,5}表示3到5个字符。{3,}超过3个字符,{,5}最多5个,{3}三个字符。

     * 表示0到多个

     + 表示1到多个。

  ¤ 脱字符号

      ^:

          > 放在字符域(如:[^\w])中表示否定(不包括的意思)——“反向选择”

          >  放在表达式之前,表示以当前这个字符开始。(/^n/i,表示以n开头)。

      注意,我们经常管"\"叫"跳脱字符"。用于转义一些特殊符号,如".","/"

 

通配符(lookarounds):断言某些字符串中某些字符的存在与否!
 
lookarounds分两种:lookaheads(正向预查 ?=)和lookbehinds(反向预查?<=)。
> 格式:
正向预查:(?=) 相对应的 (?!)表示否定意思
反向预查:(?<=) 相对应的 (?<!)表示否定意思
前后紧跟字符
$regex  = '/(?<=c)d(?=e)/' /* d 前面紧跟c, d 后面紧跟e*/
$str  = 'abcdefgk' ;
$matches  = array ();
 
if (preg_match( $regex , $str , $matches )){
     var_dump( $matches );
}
 
echo  "\n" ;

否定意义:

$regex  = '/(?<!c)d(?!e)/' /* d 前面不紧跟c, d 后面不紧跟e*/
$str  = 'abcdefgk' ;
$matches  = array ();
 
if (preg_match( $regex , $str , $matches )){
     var_dump( $matches );
}
 
echo  "\n" ;

 

>字符宽度:零
验证零字符代码
$regex  = '/HE(?=L)LO/i' ;
$str  = 'HELLO' ;
$matches  = array ();
 
if (preg_match( $regex , $str , $matches )){
     var_dump( $matches );
}
 
echo  "\n" ;

打印不出结果!

$regex  = '/HE(?=L)LLO/i' ;
$str  = 'HELLO' ;
$matches  = array ();
 
if (preg_match( $regex , $str , $matches )){
     var_dump( $matches );
}
 
echo  "\n" ;

 能打印出结果!

说明:(?=L)意思是HE后面紧跟一个L字符。但是(?=L)本身不占字符,要与(L)区分,(L)本身占一个字符。

 
捕获数据
 
没有指明类型而进行的分组,将会被获取,供以后使用。
> 指明类型指的是通配符。所以只有圆括号起始位置没有问号的才能被捕捉。

> 在同一个表达式内的引用叫做反向引用。
> 调用格式: \编号(如\1)。
$regex  = '/^(Chuanshanjia)[\w\s!]+\1$/' ;   
$str  = 'Chuanshanjia thank Chuanshanjia' ;
$matches  = array ();
 
if (preg_match( $regex , $str , $matches )){
     var_dump( $matches );
}
 
echo  "\n" ;

 

> 避免捕获数据
   格式:(?:pattern)
   优点:将使有效反向引用数量保持在最小,代码更加、清楚。
 
>命名捕获组
   格式:(?P<组名>) 调用方式 (?P=组名)
$regex  = '/(?P<author>chuanshanjia)[\s]Is[\s](?P=author)/i' ;
$str  = 'author:chuanshanjia Is chuanshanjia' ;
$matches  = array ();
 
if (preg_match( $regex , $str , $matches )){
     var_dump( $matches );
}
 
echo  "\n" ;

运行结果

  

惰性匹配(记住:会进行两部操作,请看下面的原理部分)

  格式:限定符?

     原理:"?":如果前面有限定符,会使用最小的数据。如“*”会取0个,而“+”会取1个,如过是{3,5}会取3个。

先看下面的两个代码:

代码1.

<?php
$regex  = '/heL*/i' ;
$str  = 'heLLLLLLLLLLLLLLLL' ;
if (preg_match( $regex , $str , $matches )){
     var_dump( $matches );
}
 
echo  "\n" ;

  结果1.

 

代码2

<?php
$regex  = '/heL*?/i' ;
$str  = 'heLLLLLLLLLLLLLLLL' ;
if (preg_match( $regex , $str , $matches )){
     var_dump( $matches );
}
 
echo  "\n" ;

  结果2

 

代码3,使用“+”

<?php
$regex  = '/heL+?/i' ;
$str  = 'heLLLLLLLLLLLLLLLL' ;
if (preg_match( $regex , $str , $matches )){
     var_dump( $matches );
}
 
echo  "\n" ;

 结果3

代码4,使用{3,5}

<?php
$regex  = '/heL{3,10}?/i' ;
$str  = 'heLLLLLLLLLLLLLLLL' ;
if (preg_match( $regex , $str , $matches )){
     var_dump( $matches );
}
 
echo  "\n" ;

 结果4

 
 

正则表达式的注释
 
格式:(?# 注释内容)
用途:主要用于复杂的注释
 
 贡献代码:是一个用于连接MYSQL数据库的正则表达式
$regex  = '/
     ^host=(?<!\.)([\d.]+)(?!\.)                 (?#主机地址)
\|
     ([\w!@#$%^&*()_+\-]+)                       (?#用户名)
\|
     ([\w!@#$%^&*()_+\-]+)                       (?#密码)
(?!\|)$/ix';
 
$str  = 'host=192.168.10.221|root|123456' ;
$matches  = array ();
 
if (preg_match( $regex , $str , $matches )){
     var_dump( $matches );
}
 
echo  "\n" ;

 

 
特殊字符
 
 
特殊字符 解释
* 0到多次
+ 1到多次还可以写成{1,}
? 0或1次
. 匹配除换行符外的所有单个的字符
\w [a-zA-Z0-9_]
\s 空白字符(空格,换行符,回车符)[\t\n\r]
\d [0-9]


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值