php特殊字符正则表达式
1. php函数preg_match_all正则表达式的基本使用详细解析
了解正则表达式之前,须要掌握一些常用的正则表达式的基础知识,这些如果能记得最好记得,记不住须要用的时候能查到就行,就多个特殊字符,所以说正则表达式玩的就是特殊,具体大家可以查看更加细致的说明。
preg_match_all函数具体说明大家可以查看PHP手册,本文运用
preg_match_all用于测试正则表达的效果。
实例代码:
复制代码
代码如下:
$html
=
'<div
id="biuuu">jb51.net</div><div
id="biuuu_2">jb51.net2</div><div
id="biuuu_3">jb51.net3</div>';
实例要求:分别将每一个DIV元素的ID和内容取出,如biuuu,biuuu_2,biuuu_3,jb51.net,jb51.net2和jb51.net3(一些常用的抓站要领就是这样匹配的)
分析:字符串是一个基本的HTML元素,每一个DIV元素对应该一个ID和内容,并且是独立的,首先考虑如何
取出一个DIV内的ID值和内容,如:jb51.net,然后匹配其它类似的元素。一个DIV中须要取出两个值,也就是两个匹配的表达式,第一个表达式用于匹配ID值(biuuu),第二个表达式用于匹配ID的内容(jb51.net),正则表达式常用的表达式运用小括号,那么前面的元素将会变成如下形式:
<div
id="(biuuu)">(jb51.net)</div>
<div
id="(表达式1)">(表达式2)</div>
好,运用如上小括号把须要匹配的区域执行
了划分,接下来就是如何
匹配各个表达式内的内容,我们猜想一个ID可能是字母,数字或下划线,那这就变得基本了,运用中括号就可以实现,如下:
表达式1:[a-zA-Z0-9_]+
(表示匹配大小写字母,数字和下划线)
那如何
匹配表达式2,因为ID的内容可以是任意的字符,但是要留心,不能匹配<或>字符,因为如果匹配这两个字符将会把后面运用的DIV都匹配出来,因此须要排除这两个字符开始的元素,也就是不匹配以<或>字符,如下:
表达式2:[^<>]+
(表示不匹配<和>字符)
这样,须要匹配的子表达式就实现了,但是还要须要匹配一个
的表达式,要领如下:
表达式:/
'\"(表达式1)\"'>(表达式2)<\/div>/
留心其中的双引号"和/须要运用
\转义字符转义,然后把前面两个表达式放进去,
如下:
'\"([a-z0-9_]+)\"'>/<div
id=\"([a-z0-9_]+)\">([^<>]+)<\/div>/
这样就实现一个匹配每一个DIV元素ID值和内容的正则表达式,然后运用
preg_match_all函数测试如下:
复制代码
代码如下:
$html
=
'<div
id="biuuu">jb51.net</div><div
id="biuuu_2">jb51.net2</div><div
id="biuuu_3">jb51.net3</div>';
preg_match_all('/<div\sid=\"([a-z0-9_]+)\">([^<>]+)<\/div>/',$html,$result);
var_mp($result);
结果:
复制代码
代码如下:
array(3)
{
[0]=>
array(3)
{
[0]=>
string(30)
"<div
id="biuuu">jb51.net</div>"
[1]=>
string(33)
"<div
id="biuuu_2">jb51.net2</div>"
[2]=>
string(33)
"<div
id="biuuu_3">jb51.net3</div>"
}
[1]=>
array(3)
{
[0]=>
string(5)
"biuuu"
[1]=>
string(7)
"biuuu_2"
[2]=>
string(7)
"biuuu_3"
}
[2]=>
array(3)
{
[0]=>
string(8)
"jb51.net"
[1]=>
string(9)
"jb51.net2"
[2]=>
string(9)
"jb51.net3"
}
}
共有三个表达式,分别显示每一个表达式匹配的值,并以数组的形式存储,这样就把每一个DIV元素的ID和内容取出。运用正则表达式最主要还是要知道须要什么,然后跟椐须要执行
匹配,并且思路清晰,并适当的借助preg_match_all函数执行
输出调试,非常方便。
2. php正则表达式
这里涉及到正则表达式中得子串捕获的概念。php中的正则表达式使用的是pcre正则库,因此使用方式上和pcre是相同的,只不过是为了使用方便封装了一起便捷的操作而已。preg_match函数和preg_match_all函数用于在php中进行正则表达式的相关处理。下面看下preg_match函数的定义:intpreg_match(string$pattern,string$subject[,array&$matches])在$subject中查询$pattern,如果找到则把匹配的字符串存储在$matches中。$matches[0]中存放整个匹配的字符串,$matches[i]中存放匹配到的第i个捕获子串。题目的解决方法:$pattern="/^NAME(.*){$/";preg_match($pattern,$string,$match);echo$match[1];//$match[1]为提取的NAME和{之间的内容。关于捕获组信息($match的信息)详情,可以参考文档:http://wang
3. php 帮写个正则表达式,去掉串内两个特殊字符(! \ )
简单粗暴一点的话,直接用str_replace,字符串替换
$str = str_replace('!','',$str);
$str = str_replace('\','',$str);
稍微复杂一点的话,用正则替换
$str = preg_replace('/(^!)|(\\)/','',$str);
将开头的!或者\字符替换成空字符(^表示开头)
4. 如何在PHP中转义正则表达式字符
在PHP中,实现转义正则表达式字符的函数是:preg_quote函数。语法如下:
Stringpreg_quote(stringstr[,stringdelimiter])
Str是用来进行字符转义的正则表达式,delimiter是其他需要转义的字符。
在PHP中可以使用preg_quote函数转义一些特殊字符。
例如:
<?php
$str=preg_quote(“/\d{3}(\-\d{4})/”);echo$str;?>
结果:
/\\d\{3\}\-d{4}\-d{4}/
<?php
$str=preg_quote(“/\d{3}(\-\d{4})/”,”3“);echo$str;?>
结果:
/\\d\{\3\}\-d{4}\-d{4}/
这两个例子有什么区别呢?
就是红色区域中的“3”,在第二个例子中将“3”也转义出了。
5. php 正则表达式 问题
书上印刷无错误
<?php echo ereg("a?","a");?> //true
<?php echo ereg("a?","bb");?> //true
<?php echo ereg("a?","aa");?>// true
你的 “?”的含义理解也没有错
另外输出 true 就是 1 false 是空
ereg("a?") 包不包含a都是true 是根本不会出现false的机会
1:"bb" 匹配包含1个或者0个中的 0个a 所以是true
2:"a" 匹配包含1个或者0个中的 1个a 所以也是true
3:"aa" 同样也是匹配包含一个a 因为正则在匹配到 "aa" 中第一个a的时候 就已经返回true了 根本就不在进行匹配下去
只能说这个正则很失败
怎么写都是true
6. php 正则表达式
建议你到我的网站上下载PHP5参考手册,里边有详细的正则表达式的参考。
模式要有开始和结束的字符,一下都是合法的:
/
|
#
'
前提是模式中不能再出现这个字符了。
结尾的/后边的is是模式修政府,具体如下
i (PCRE_CASELESS)
如果设定此修正符,模式中的字符将同时匹配大小写字母。
m(PCRE_MULTILINE)
默认情况下,PCRE 将目标字符串作为单一的一“行”字符所组成的(甚至其中包含有换行符也是如此)。“行起始”元字符(^)仅仅匹配字符串的起始,“行结束”元字符($)仅仅匹配字符串的结束,或者最后一个字符是换行符时其前面(除非设定了 D 修正符)。这和 Perl 是一样的。
当设定了此修正符,“行起始”和“行结束”除了匹配整个字符串开头和结束外,还分别匹配其中的换行符的之后和之前。这和 Perl 的 /m 修正符是等效的。如果目标字符串中没有“\n”字符或者模式中没有 ^ 或 $,则设定此修正符没有任何效果。
s(PCRE_DOTALL)
如果设定了此修正符,模式中的圆点元字符(.)匹配所有的字符,包括换行符。没有此设定的话,则不包括换行符。这和 Perl 的 /s 修正符是等效的。排除字符类例如 [^a] 总是匹配换行符的,无论是否设定了此修正符。
x(PCRE_EXTENDED)
如果设定了此修正符,模式中的空白字符除了被转义的或在字符类中的以外完全被忽略,在未转义的字符类之外的 # 以及下一个换行符之间的所有字符,包括两头,也都被忽略。这和 Perl 的 /x 修正符是等效的,使得可以在复杂的模式中加入注释。然而注意,这仅适用于数据字符。空白字符可能永远不会出现于模式中的特殊字符序列,例如引入条件子模式的序列 (?( 中间。
e
如果设定了此修正符,preg_replace() 在替换字符串中对逆向引用作正常的替换,将其作为 PHP 代码求值,并用其结果来替换所搜索的字符串。
只有 preg_replace() 使用此修正符,其它 PCRE 函数将忽略之。
注意: 本修正符在 PHP3 中不可用。
A(PCRE_ANCHORED)
如果设定了此修正符,模式被强制为“anchored”,即强制仅从目标字符串的开头开始匹配。此效果也可以通过适当的模式本身来实现(在 Perl 中实现的唯一方法)。
D(PCRE_DOLLAR_ENDONLY)
如果设定了此修正符,模式中的美元元字符仅匹配目标字符串的结尾。没有此选项时,如果最后一个字符是换行符的话,美元符号也会匹配此字符之前(但不会匹配任何其它换行符之前)。如果设定了 m 修正符则忽略此选项。Perl 中没有与其等价的修正符。
S
当一个模式将被使用若干次时,为加速匹配起见值得先对其进行分析。如果设定了此修正符则会进行额外的分析。目前,分析一个模式仅对没有单一固定起始字符的 non-anchored 模式有用。
U(PCRE_UNGREEDY)
本修正符反转了匹配数量的值使其不是默认的重复,而变成在后面跟上“?”才变得重复。这和 Perl 不兼容。也可以通过在模式之中设定 (?U) 修正符或者在数量符之后跟一个问号(如 .*?)来启用此选项。
X(PCRE_EXTRA)
此修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式中的任何反斜线后面跟上一个没有特殊意义的字母导致一个错误,从而保留此组合以备将来扩充。默认情况下,和 Perl 一样,一个反斜线后面跟一个没有特殊意义的字母被当成该字母本身。当前没有其它特性受此修正符控制。
u(PCRE_UTF8)
此修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式字符串被当成 UTF-8。本修正符在 Unix 下自 PHP 4.1.0 起可用,在 win32 下自 PHP 4.2.3 起可用。自 PHP 4.3.5 起开始检查模式的 UTF-8 合法性。
7. PHP正则表达式的问题,实现特殊符号的替换,能实现,追加高分
utf-8
PHP
$string = '当服dkfj#sd的时刻房间@asdfasdf圣123AAAAAAAAA13诞节 圣诞节@独守空房#的科地方#打df机@dkfj[sfj';
$pattren = "/(@([\x{4e00}-\x{9fa5}]|[@#\w])*[^@#\w])/u";
if(preg_match($pattren,$string,$matches)){
echo $matches[1];
}else{
echo 'wrong code';
}
8. php 正则表达式符号问题
在这个正则表达式中 {} 就是//
preg_match 这个函数源于perl的正则,在perl的正则中分界符可以很多的成对分隔符
这里没有使用// 的原因是正则表达式中有/这样的字符,使用//分隔的话需要对其中的/进行转义
你还可以把{}换成## []试试,应该都是可以的
9. 详解PHP正则表达式:什么是正则表达式
正则表达式,又称规则表达式,英文名为Regular Expression,在代码中常简写为regex、regexp或RE,是计算机科学的一个概念。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。
正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串。