php正则表达式实例,PHP正则表达式判断浏览器语言实例
php正则表达式实例,PHP正则表达式判断浏览器语言实例详细介绍
本文目录一览: PHP正则表达式判断浏览器语言实例
PHP函数实例,基于正则表达式来判断浏览器的默认语言,其实php判断浏览器语言使用超级全局变量_SERVER["HTTP_ACCEPT_LANGUAGE"]
就可以获得了,然后再根据HTTP请求的Accept-Language:
头信息用正则匹配,最终判断出语言类型。
PHP判断浏览器实例函数:
01
<!--?php 02$lang=substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,4);
03//只取前4位,可判断最优先的语言
04if
(preg_match("/zh-c/i",
$lang))
05
echo
"简体中文";
06else
if
(preg_match("/zh/i",
$lang))
07
echo
"繁体中文";
08else
if
(preg_match("/en/i",
$lang))
09
echo
"English";
10else
if
(preg_match("/fr/i",
$lang))
11
echo
"French";
12else
if
(preg_match("/de/i",
$lang))
13
echo
"German";
14else
if
(preg_match("/jp/i",
$lang))
15
echo
"Japanese";
16else
if
(preg_match("/ko/i",
$lang))
17
echo
"Korean";
18else
if
(preg_match("/es/i",
$lang))
19
echo
"Spanish";
20else
if
(preg_match("/sv/i",
$lang))
21
echo
"Swedish";
22else
23
echo
$_SERVER["HTTP_ACCEPT_LANGUAGE"];
24?>
在使用时只需调用函数名即可,本函数会自动返回检测结果。
php正则表达式
/(?<==')[^']+?(?=')|(?<==)[^';]+(?=;|$)/g
使用它做匹配得到的数组就是你想要的
$str = <<
<str
s0.age=12;s0.home='\u1234\u52345\u7890';s0.address='abcdef';s0.name='12345'
STR;
$reg = "/age=(?
\d+).*?home='(?
[^']+)'.*?address='(?
</str
[^']+)'.*?name='(? [^']+)'/";
preg_match($reg, $str, $match);
$str = sprintf("%s %s %s %s", $match['age'], $match['home'], $match['address'], $match['name']);
var_dump($str);
php正则如何实现查找替换
在php中可以使用正则表达式“preg_replace ( $pattern , $replacement , $subject , $limit , $count)”实现查找替换。推荐:《PHP视频教程》php 正则搜索和替换 preg_replacepreg_replace — 执行一个正则表达式的搜索和替换方法说明:preg_replace ( $pattern , $replacement , $subject , $limit , $count)搜索subject中匹配pattern的部分, 以replacement进行替换。$limit , $count 参数可有可无limit : 每个模式在每个subject上进行替换的最大次数。默认是 -1(无限)。count : 如果指定,将会被填充为完成的替换次数。返回值 :如果subject是一个数组, preg_replace()返回一个数组, 其他情况下返回一个字符串。如果匹配被查找到,替换后的subject被返回,其他情况下 返回没有改变的 subject。如果发生错误,返回 NULL 。实例1:
<!--?php$PIWIK_API = 'filter_offset={offset}&period={period}&date={date}';$patterns = array( '/{offset}/', '/{period}/', '/{date}/');$replacements = array( 33, 'day', '216-11-11');$url = preg_replace($patterns, $replacements, $PIWIK_API);//结果: $url = "filter_offset=33&period=day&date=216-11-11"实例2: '{offset}', 'period' => '{period}', 'date' => '{date}');$patterns = array( '/{offset}/', '/{period}/', '/{date}/');$replacements = array( 33, 'day', '216-11-11');$url = preg_replace($patterns, $replacements, $PIWIK_API);//结果: /*$url = array(3) { ["filter_offset"]=> string(2) "33" ["period"]=> string(3) "day" ["date"]=> string(9) "216-11-11"}*/
php中的正则表达式有哪些?
正则表达式中"/"是表达式开始和结束的标记,“\”可以将后面出现的字符标记为特殊字符,接下来在PHP中具体演示一下:
1,正则表达式是以/作为开始和结束的标记,表达式语法在两个/中间包裹,如下图所示
2,接着演示一下\,像下面的表达式匹配的是n
3,但是如果在n前面加上\匹配的就是换行符号了,如下图所示
4,可以用\进行转义的字符主要有以下几种
几个php正则表达式结合switch输出的例子
<!--?phpheader ( "Content-Type: text/html; charset=UTF-8" );
$x = "";
if(!empty($_GET['action'])){
$x = $_GET['action'];
}
switch ($x){
case "email":
$email_address = $_POST["email_address"];
$pattern = "/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i";
// $pattern = "/^([a-z0-9]*[-_\.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?$/i";
if ( preg_match( $pattern, $email_address ) ){
$reply1 = "您输入的电子邮件地址合法
\n";
$user_name = preg_replace( $pattern ,"$1", $email_address );
$domain_name = preg_replace( $pattern ,"$2", $email_address );
$reply1 .= "用户名:".$user_name."
\n";
$reply1 .= "域名:".$domain_name."
\n\n";
}
php如何使用正则表达式实现替换
推荐:《PHP视频教程》该方法适用于任何品牌的电脑。PHP正则替换preg_replace函数的使用
经过以上的例子,相信大家知道,[ ] 和里面的,有什么作用了。也可以看到,匹配的字符串必须加 / /(看例子的第一个参数)
<!--?php$str="acsdcssc<6666>sdcd";echo preg_replace("/<.*>/","",$str);//这个是表示去除以
结尾的那部份,输出结果是:acsdcssdcd注意:上面的 .* 是表示任何字符,也就是说不管<>包住的是什么都去掉其中. 表示任意字符, * 表示任意个数现在我们来改动一下,如果不想是任何个数呢?$str="acsdcs<55555555>sc<6666>sdcd";echo preg_replace("/<.{4}>/","",$str); //此时输出:acsdcs<55555555>scsdcd因为{4}指定了条件:<>内为4个字符的才满足条件,所以<55555555>不符合条件,没有被替换。注意:这时我们又学到了一个知识点{数字} 表示指定前面的个数,*就表示是任意个(0--无限个)表示重复次数的除了 *, {指定次数} 表示,还有很多表达形式:
<!--?php$str="acsdcssc<6666>sd<>cd";echo preg_replace("/<[0-9]*>/","",$str);//输出acsdcscdecho "
开头,以>
";echo preg_replace("/<[0-9]+>/","",$str);//输入acsdcsscsd<>cd?>上面的例子只要是为了 表达 * 与+的区别 ,* 表示重复0数或n 次,而+ 表示1次以上,即一例中<[0-9]+ >表示<>里面至少要有一个数字才符合条件。相信这时大家知道,为什么上例中用* 和用+输出的结果不同了吧再来:
<!--?php$str="acsdcssc<6666>sd<>cd";echo preg_replace("/<[0-9]?>/","",$str);//输出acsdcs<55555555>sc<6666>sdcd?>看[0-9]? 这里的?表示要是0次或1 次,超过1次又不符合条件了。总结一下,上面我们学会了 * + ? 和大括号{}表示重复次数的方法。---------------------------------------------------------------------------------------------------- $s=preg_replace("/(.*?[月票|求|更].*?)/i","",$s); preg_match_all('/href=\"([0-9]+)\.shtm">(.+?)<\/a>/i',$s,$arr_dstorycate); print_r($arr_dstorycate);---------------------------------------------------------------------------------------------------- preg_match_all("/
/i",$content,$arr_dstorycate); print_r($arr_dstorycate);补充:.$pattern是数组,$replace也是数组,则中对应的 元素进行替换phppreg_replace有五个参数,有三个是必须参数Preg_replace(mixed $pattern, mixed $replacement, mixed $subject [,int $limit = -1 [,int $count ]]); $pattern 可以是字符串,字符串数组,或者preg$replace 是用于替换的字符串或字符串数组$subject 目标字符串或者目标字符串数组$limit 每个模式在每个$subject上最大的替换次数,默认是-1(无限次)$count 返回在目标字符串所替换的次数在repalce与pattern中有几点要注意的1.$pattern是数组,$replace也是字符串,那么所有模式都使用这个字符串来匹配; 2.$pattern是数组,$replace也是数组,则中对应的 元素进行替换3.如果数组$pattern大于$replace,则多出来的$pattern用空的字符串进行替换,$replace少于$patterns,则匹配到的值全部用空字符串来替换4.对于上面例子中出现的${1},${2},${3},这个叫做包含后向引用,里面的数字代表原子出现的位数,有两种写法,一种是\\n,一种是${n},推荐使用第二种写法.会把目标字符串匹配到的pattern中的原子,按照要求变化目标字符串的格式,或者匹配的原子原样输出(这里举两个例子) 把时间按照 下划线分割开来,${3}就是匹配的到$patterns中的第三个原子((\d{1,2})),${4}就是匹配的到$patterns中的第四个原子((\d{1,2}))以此类推, 例如大家熟悉的smarty模板引擎中编译后替换的方法5.第四个参数的$limit的使用,第四个参数的意思是每个模式在每个subject上进行替换的最大次数如果limit为n,它只用正则替换n次6.第五个参数$count的使用,$count的意思是,subject目标字符串被替换的次数,拿第五点的例子来说上面代码中的例子运行结果如下: 附加:preg_replace与str_replace的关系是什么呢?我们可以理解为str_replace是preg_repalce的一个子集.只是str_replace中的第一个参数写的是string,而preg_replace写的是一个正则表达式
求php 正则表达式
<!--?php $str = "[attach]1[/attach][attach]2
[/attach]";
preg_match_all('#\[attach\](.*?)\s*?\[/attach\]#si',$str,$matches);
var_dump($matches);
//End_php
$str ='"TOKEN": "EQLV0vUOlcLmBBrrFVt4z_F6"'
preg_match('/^\"TOKEN\":\"\w{24}\"$/',$str,$arrResults);
PHP正则表达式如何替换像这样的案例的
这个用正则表达式替换是比较简单的,因为有分隔符/,所以把分隔符后面的都替换掉就行了.
<!--?php$str="龙门飞甲/龙门飞甲电视剧版";
$regex="~/.*?$~";
echo preg_replace($regex,"",$str);
?>
如果有多个用空格隔开的类似字符串,可以用下面的正则表达式替换
<!--?php$str="龙门飞甲/龙门飞甲电视剧版 龙门飞甲/龙门飞甲电视剧版";
$regex="~/.*?(?= |$)~";
echo preg_replace($regex,"",$str);
?>
正则表达式 PHP
{}中不能使用反向引用,至少不能直接使用,有没有其他使用方法不祥(可能性比较小)
建议解决方式:
使用如下正则以及判断
$str="5aaaaa";
$ret=preg_match("/^(\d)(\w)\\2*$/",$str,$phones);
if($ret==1)
{
if($phones[1]==strlen($phones[0])-1)
{
echo('true');
}
else
{
echo('false1');
}
}
else
{
echo('false2');
}
说明:
先用正则表达式/^(\d)(\w)\\2*$/确定字符串必须为数字开头,第二个为字符,从第二个字符开始重复直到结束
然后进行条件判断,因为$phones[1]中存放了第一个字符,因此比较字符串长度就可以了
===========================================
补充:
如果你的这个字符串需要从某个大的正则表达式中的匹配,那么我建议你用括号把这个字符串匹配到的结果括起来做一个子模式.
例如:
$str="(5ab3de)(6cde9gh)";
$ret=preg_match("/\(((\d)\w*)\)\(((\d)\w*)\)/",$str,$phones);
print_r($phones);
这样$phones[1]表示字符串,$phones[2]表示字符串长度,然后再做判断.对于杂乱无章的字符串反而简单用\w*就可以了.
同意liuxinling_06的思路,不过对他提供的正则做一点小小的改动,就更符合楼主的要求了。
'/^(\d)([a-z])\2*$/i'
这样就只能匹配“以一个数字起始,后跟一串字母,这些字母是完全相同的”这样的字符串。
然后再用liuxinling_06提供的if语句进行检测。
那你倒是说清楚"杂乱无章"到底允许哪些字符啊. 如果只是允许数字和字母, 正则稍微改一下就可以了. 其实大家都把思路跟你讲得很清楚了, 你完全根据可以自己的需要发挥, 除非你一点都不了解正则表达式.
/^(\d)([a-z])*$/i
另外再告诉你, 你想仅靠正则表达式完成你所说的功能是行不通的.
一定要在一句里面完成吗?
如果不一定的话,你可以先提取第一个数字,把它存在一个变量里.
然后再匹配一次,把变量放进{}就可以了.
写一个正则表达式的函数
然后就调用他 把你的变量引入函数
以后只要改函数 后台的代码一点都不用改
我认为蛮好用 你试试!!
嘿嘿~~~
门外汉,探个头瞅一眼就走人!