php 正则表达式 匹配以“XXX”开头不能以“YYY”结尾

 更新时间:2016年11月25日 17:42  点击:2145
本文章来给大家介绍php 正则表达式 匹配以“XXX”开头不能以“YYY”结尾,下面的实例我们以abc开头与 首先来是abc开头, 没有想的就是 ^abc 以abc开头了,不能以“xyz”结尾


后面要有一串的字符串

一般我用[^…………]这样来否定,当然也别的写法

 
既然是否定“x”、“y”、“z”

就是[^xyz]

 
整个写来就是

^abc[^xyz]*$

 
PHP测试:

 代码如下 复制代码

<?php
$str = 'abcdef124f';
$search = '/^abc[^xyz]*$/';

if(preg_match($search,$str)) {
 echo $str.' 符合<br />';
}else {
 echo $str.' 不符合<br />';
}
//output abcdef124f 符合


$str = 'abcdef12x124';
if(preg_match($search,$str)) {
 echo $str.' 符合<br />';
}else {
 echo $str.' 不符合<br />';
}
//output abcdef12x124 不符合

?>

本文章来给大家详细介绍php正则匹配href中url地址详解,有需要了解的朋友可进入参考。

正则匹配href中url

 代码如下 复制代码

hrefs*=s*(?:"(?<1>[^"]*)"|(?<1>\S+))

取href的链接的

href是正常的href字符
s表示一个空格,*表示1个或者多个匹配,当前的意思是一个或者多个空格
=是正常的字符
?<1>在这里应该是命名捕获组,我不知道你这个正则是哪个流派的,但应该不是js和c#的,呵
\S+,\前面一个表示转义,这个的意思是后面带一个S,而S可以是多个,同样,"也是转义,因为"和都是正则的元字符
[^"],在方括号中的^,如果我没记错的话,应该是不包含的意思吧,就是不不含"

差不多了吧,不一定全部正确,你应该去了解一下正则的元正符再来看

 

*是指0或者多个 href= 和 href =都匹配

(?<name>exp)   匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp)  匹配exp,不捕获匹配的文本,也不给此分组分配组号

"(?<1>[^"]*)" 匹配的 "任意字符串" 只要引号内不含^"就可以

还有一个作用就是把匹配的引号内的字串放在group 1里


(?<1>\S+)这里可能是(?<1>S+)
匹配任意非空字串,并放入 group 1里

因此整个表达式应该是匹配一个
href属性,并把属性值放入 group 1中

这样可以在匹配后直接使用该属性值


url地址栏传参数中文乱码解决方法


php地址栏传中文$_GET下来后乱码,urlencode和urldecode用法详解
url编码
语法: string urlencode(string str);
返回值: 字符串
函数种类: 编码处理

 代码如下 复制代码

<?php
$ChineseName="我的名字,是中文的哦";
$EncodeStr=urlencode($ChineseName);
echo "<a href=/cgi/personal.cgi?name=$EncodeStr>我的名字</a>";
?>


url解码
还原 URL 编码字符串。
语法: string urldecode(string str);
返回值: 字符串
函数种类: 编码处理
例如:
对前面传过来的中文进行处理显示

:

 代码如下 复制代码

<?php
$DecodeStr=urldecode($_GET['name']);//你可能不用解码都可以,因为浏览器会自动帮你解码
echo $DecodeStr;
?>

本文章给大家介绍一个PHP正则匹配指定长度字符必须有数字、字母、下划线组成,现在我们先来看一个简单正则,规则是:6到16位,这样就可以了{6,16}

任意的字符6到16位是.{6,16}

只有 数字、字母、下划线组成 就是[0-9_a-zA-Z]

 总的加在一起就椒 ^[_0-9a-z]{6,16}$

 代码如下 复制代码

<?php
function ispassword($str) {
 if (preg_match('/^[_0-9a-z]{6,16}$/i',$str)){
  return true;
 }else {
  return false;
 }
}
$password = 'abcde@';
if(ispassword($password)) {
 echo '符合';
}else {
 echo '不符合';
}
//output  不符合

 

echo '<br>';
$password = 'abcdeasdas_1324';
if(ispassword($password)) {
 echo '符合';
}else {
 echo '不符合';
}
//output  符合
?>

例2

 代码如下 复制代码


$action = trim($_get['action']);
if($action == "sub")
{
    $str = $_post['dir'];   
    //if(!preg_match("/^[".chr(0xa1)."-".chr(0xff)."a-za-z0-9_]+$/",$str)) //gb2312汉字字母数字下划线正则表达式
    if(!preg_match("/^[x{4e00}-x{9fa5}a-za-z0-9_]+$/u",$str))   //utf-8汉字字母数字下划线正则表达式
    {  
        echo "<font color=red>您输入的[".$str."]含有违法字符</font>";  
    }
    else
    {
        echo "<font color=green>您输入的[".$str."]完全合法,通过!</font>";  
    }
}
?>
<form method="post" action="">
输入字符(数字,字母,汉字,下划线):
    <input type="text" name="dir" value="">
    <input type="submit" value="提交">
</form>

有时我们注册时希望用户可以是中文也可以是英文注册,这里我们的要用户名如何正则验证呢,下面我来给大家介绍一个用户名正则表达式、含中文、长度为4-16个字符实例。

[a-zA-Zxa0-xff_]小写大写英文,或者中文,或者下划线开头
[0-9a-zA-Zxa0-xff_]后面的内容可以是小写大写中文数字下划线
[0-9a-zA-Zxa0-xff_]{3,15}后面的内容重复3-15次

 
所以整个正则表达式为[a-zA-Zxa0-xff_][0-9a-zA-Zxa0-xff_]{3,15}
也可以加上开头结尾锚记^[a-zA-Zxa0-xff_][0-9a-zA-Zxa0-xff_]{3,15}$

 代码如下 复制代码

<?php
function isusername($str) {
 if (preg_match('/^[a-zA-Zxa0-xff_][0-9a-zA-Zxa0-xff_]{3,15}$/',$str)){
  return true;
 }else {
  return false;
 }
}

$username = 'abcde123';
if(isusername($username)) {
 echo '符合';
}else {
 echo '不符合';
}
//output  符合


echo '<br>';
$username = '1abcdeasdas_1324';
if(isusername($username)) {
 echo '符合';
}else {
 echo '不符合';
}
//output  不符合
?>

如果你是普通的用户我我们就不需要上面的实例了,由字母a~z(不区分大小写)、数字0~9、减号或下划线组成
只能以数字或字母开头和结尾 用户名长度为4~18个字符

 代码如下 复制代码

^[a-za-z0-9]{1}[a-za-z0-9|-|_]{2-16}[a-za-z0-9]{1}$

用户名为大写字母小写字母或下划线,并以字母开头,长度为6-20

 代码如下 复制代码

^[a-za-z][wd_]{5,19}

我想正则匹配邮箱地址这个应用我们做web开的几乎都使用到吧,下面我来给大家介绍在邮箱地址正则匹配时的一些问题分析,有需要更深入理解邮箱地址正则的朋友可进入参考。

有个php正则表达式邮箱问题

 代码如下 复制代码

$a='/([w._]{2,10})@(w{1,}).([a-z]{2,4})/';
$b='1412424545645454545454545k@qq.com';

if(preg_match($a,$b)){
 echo "电子邮件合法";
}else{
 echo "电子邮件不合法啊";
}

为何上面的输出为合法???{2,10}这里不是只能放2到10位数字吗 这里已经超出了10位了

 这个正则是能匹配的,匹配到这样这部分 '545454545k@qq.com'
前面部分的1412424545645454不匹配,所以还是合法的。
你想要匹配一整段正确可以改成这样

 代码如下 复制代码
$a='/^([w._]{2,10})@(w{1,}).([a-z]{2,4})$/';


 要注意你的正则

 代码如下 复制代码
  /([w._]{2,10})@(w{1,}).([a-z]{2,4})/

他没有断言,意味着只要字符串中有符合的部分就匹配
因此{2,10}是只能2到10位匹配,但不针对整个字符串只要有一部分符合就匹配了。

你要判断一整段字符串是否都匹配就要用断言。如^ $

 代码如下 复制代码
/^([w._]{2,10})@(w{1,}).([a-z]{2,4})$/

注意头和尾加上了^ $

 

 代码如下 复制代码
$a='/^([w._]{2,10})@(w{1,}).([a-z]{2,4})$/';
$b='1412424545645454545454545k@qq.com';
if(preg_match($a,$b)){
 echo "电子邮件合法";
}else{
 echo "电子邮件不合法啊";
}

好了下面我来进行更完善写法

PHP 邮箱验证正则表达式 新手实例:

 代码如下 复制代码

<?php
function isEmail($email){
if(preg_match(“/^[0-9a-zA-Z]+@(([0-9a-zA-Z]+)[.])+[a-z]{2,4}$/i”,$email )){
return ‘是邮箱’;
}      else{
return ‘不是邮箱’;
}
}
?>

Javascript(js) 邮箱验证正则表达式:

myreg = /^([a-zA-Z0-9]+[_|_|.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|_|.]?)*[a-zA-Z0-9]+.[a-zA-Z]{2,4}$/;
这个可以验证 形如:i@julying.com ,i@i.com 这种邮箱
Javascript(js) 邮箱验证正则表达式 新手实例:
<script type=”text/javascript”>
function isEmail(val){
var myreg = /^([a-zA-Z0-9]+[_|_|.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|_|.]?)*[a-zA-Z0-9]+.[a-zA-Z]{2,4}$/;
 
if(!myreg.test(val))
return ‘不是邮箱’;
return ‘是邮箱’;
};
alert( isEmail(‘i@julying.com’) );
</script>

[!--infotagslink--]

相关文章

  • PHP正则表达式取双引号内的内容

    取双引号内的内容我们如果一个字符串中只有一个可以使用explode来获得,但如果有多个需要使用正则表达式来提取了,具体的例子如下。 写程序的时候总结一点经验,如何只...2016-11-25
  • PHP正则表达式之捕获组与非捕获组

    今天遇到一个正则匹配的问题,忽然翻到有捕获组的概念,手册上也是一略而过,百度时无意翻到C#和Java中有对正则捕获组的特殊用法,搜索关键词有PHP时竟然没有相关内容,自己试了一下,发现在PHP中也是可行的,于是总结一下,分享的同...2015-11-08
  • 一个关于JS正则匹配的踩坑记录

    这篇文章主要给大家介绍了一个关于JS正则匹配的踩坑记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-13
  • php 验证只能输入汉字、英语、数字的正则表达式

    正则表达式是一门非常有用的并且进行模糊判断的一个功能了,我们下面来看通过正则来验证输入汉字、英语、数字,具体如下。 收藏了正则表达式。可以验证只能输入数...2016-11-25
  • java正则表达式判断前端参数修改表中另一个字段的值

    这篇文章主要介绍了java正则表达式判断前端参数修改表中另一个字段的值,需要的朋友可以参考下...2021-05-07
  • 常用的日期时间正则表达式

    常用的日期时间正则表达式 下面收藏了大量的日期时间正则匹配函数,包括分钟,时间与秒都能达到。 正则表达式 (?n:^(?=d)((?<day>31(?!(.0?[2469]|11))|30(?!.0?2)|29(...2016-11-25
  • PHP正则表达式匹配验证提取网址URL实例总结

    网址规则是可寻的,所以我们可以使用正则表达式来提取字符串中的url地址了,下面一起来看看小编整理的几个PHP正则表达式匹配验证提取网址URL实例. 匹配网址 URL 的...2016-11-25
  • 正则表达式中两个反斜杠的匹配规则详解

    这篇文章主要介绍了正则表达式中两个反斜杠的匹配规则,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-05-07
  • JS中使用正则表达式g模式和非g模式的区别

    这篇文章给大家详细介绍了JS中使用正则表达式g模式和非g模式的区别,非常不错,具有参考借鉴价值,需要的朋友参考下吧...2017-04-03
  • C#正则表达式使用方法示例

    这篇文章主要介绍了C#正则表达式使用方法,大家参考使用...2020-06-25
  • 常用C#正则表达式汇总介绍

    c#正则表达式,用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。...2020-06-25
  • JavaScript利用正则表达式替换字符串中的内容

    本文主要介绍了JavaScript利用正则表达式替换字符串中内容的具体实现方法,并做了简要注释,便于理解。具有一定的参考价值,需要的朋友可以看下...2017-01-09
  • 一文秒懂python正则表达式常用函数

    这篇文章主要介绍了python正则表达式常用函数及使用方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-05-07
  • Idea使用正则表达式批量替换字符串的方法

    这篇文章给大家介绍了Idea使用正则表达式批量替换字符串的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧...2021-07-21
  • js正则学习小记之匹配字符串字面量

    关于匹配字符串问题,有很多种类型,今天讨论 js 代码里的字符串匹配,因为我想学完之后写个语法高亮练手,所以用js代码当作例子...2021-05-07
  • PHP正则表达式之捕获组与非捕获组

    今天遇到一个正则匹配的问题,忽然翻到有捕获组的概念,手册上也是一略而过,百度时无意翻到C#和Java中有对正则捕获组的特殊用法,搜索关键词有PHP时竟然没有相关内容,自己试了一下,发现在PHP中也是可行的,于是总结一下,分享的同...2015-11-08
  • C# 中使用正则表达式匹配字符的含义

    正则表达式的作用用来描述字符串的特征。本文重点给大家介绍C# 中使用正则表达式匹配字符的含义,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧...2020-06-25
  • Python验证的50个常见正则表达式

    这篇文章主要给大家介绍了关于利用Python验证的50个常见正则表达式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-11
  • C#编程自学之运算符和表达式

    这篇文章主要介绍了C#运算符和表达式,这是自学C#编程的第五篇,希望对大家的学习有所帮助。...2020-06-25
  • PHP正则表达式过滤html标签属性(DEMO)

    这篇文章主要介绍了PHP正则表达式过滤html标签属性的相关内容,实用性非常,感兴趣的朋友参考下吧...2016-05-06