php 正则表达式 ?= ?!是什么意思

 更新时间:2016年11月25日 17:42  点击:1886
php 正则表达式 ?= ?!是什么意思呢?这个问题我拿出来估计有很多的php程序员说不清楚了,下面我们来为各位介绍一下.

先来看看正则表达式的语法吧。

php 正则表达式 ?= ?!是什么意思

我们看到,正则表达式中有(?=a)和(?!a)来表示我们是否需要匹配某个东西。

所以我们有需要不匹配某样东西的时候我们就可以用(?!a)了。比如说我们要匹配不含hello的字符串就可以这样写。

^(?!.*hello)

这里.*用来表示hello之前可能有其他的字符,为什么还要加^呢,因为如果不加的话,可能匹配到h之后的这个位置上了。

我们现在就可以解决regex golf上的abba这道题了。这道题是让我们去匹配不含abba这种形式的单词,比如abba,anallagmatic就不应该匹配上。所以这道题只需要这样就可以了。

^(?!.*(.)(.)\2\1)

然后利用不匹配,我们还可以解决prime这道题,这道题是让我们匹配有素数个x的串,先看正则。

^(?!(xx+)\1+$)

(xx+)是匹配2个及2个以上的x,(xx+)\1+就是匹配重复出现2个及以上的串,所以(xx+)\1+就表示了那些非素数的串,那么素数串就是除去这些非素数串,就是上面这个正则表达式了。

JGsoft RegexBuddy 是一款正则表达式工具。容易创建完全符合你的要求的正则表达式。清楚地理解其他人写的复杂的正则表达式。通过示例字符串和文件,快速测试任意正则表达式,防止在处理真实数据时发生错误。

RegexBuddy是一款正则表达式编辑工具,帮助你的编写需要的正则表达式,还可以使用它理解别人编写的表达式。RegexBuddy提供可视化的支持、提示、调试方面的便利;在使用正则表达式时,RegexBuddy将正则式转换为多种语言的字串,还提供了代码输出功能。

RegexBuddy是学习正则表达式时的比较好的帮手,它可以容易地建立你想要的正确的正则表达式。清晰地推断他人所写的复杂的正则表达式。它还可以用给出的实例字符串或文件快速地进行测试匹配,从而防止了在实际应用中出现错误。RegexBuddy会在你的源代码中根据你所应用的特殊编程语言,自动生成带有正则表达式的代码段。同时你也可以收集正则表达式到库中,以在未来重新使用。

比如我们在网页中抓取一段文本,比较凌乱,我们需要从中抓取需要下载的地址,简简单单几句就可以抓取到其中内容。

推荐:正则表达式编写神器 -- JGsoft RegexBuddy

推荐:正则表达式编写神器 -- JGsoft RegexBuddy

官网地址:http://www.regexbuddy.com/

php中验证用户名我们通常使用了正则函数来操作了,下文整理的是几个常用的验证用户名的函数,希望这些函数可以帮助到各位.

验证用户名是否以字母开头与验证密码只能为数字和字母的组合代码,三种常用验证函数:验证邮箱地址格式 ,验证密码只能为数字和字母的组合以及验证用户名是否以字母开头代码,这是用户注册时或提交表单时会用的。
代码如下:


php代码:


function is_email($email)
{
  if (preg_match("/[a-za-z0-9]+@[a-za-z0-9]+.[a-z]{2,4}/",$email,$mail))
  {
      return true;
  }
  else
  {
      return false;
  }
}

 验证用户名是否以字母开头

function is_user_name($user)
 {
  if (preg_match("/^[a-za-z]{1}([a-za-z0-9]|[._]){3,19}$/",$user,$username))
  {
      return true;
  }
  else
  {
      return false;
  }
}

 验证密码只能为数字和字母的组合

function is_psd($psd)
{
  if (preg_match("/^(w){4,20}$/",$psd,$password))
  {
      return true;
  }
  else
  {
      return false;
  }
}

正则过滤就是利用preg_replace执行替换指定的内容或进行preg_macth进行匹配进行判断,两种效果差不多我们来介绍前者。

非法的汉字会影响到显示甚至程序的执行,会出现一些意想不到的结果。所以我们需要过滤这些非法的汉字或字符。
代码如下

 代码如下 复制代码

function normalizeText($text, $length = null)
{
    $text = \Normalizer::normalize($text, \Normalizer::FORM_C);
    $text = preg_replace('/[^\p{L}\p{P}\p{N}\p{S}\p{Zs}]/u', "", $text);
    $text = preg_replace('/^\p{Z}*/u', "", $text);
    $text = preg_replace('/\p{Z}*$/u', "", $text);
    if ($length !== null) {
        $text = mb_substr($text, 0, $length, 'utf-8');
    }
    return $text;
}

preg_match函数执行正则规则就可以过滤url中指定的一些字符了,下面来看一个url参数过程中由preg_match过滤一些字符的例子。

PHP开发中经常用到URL传递参数,对传递的参数要进行安全过滤,过滤URL中非法参数,这是php安全的一个细小的地方,却事关安全的大事。URL参数一般都是数字或者字母加上”-“或者”_”组成,参数带有其他的符号的都要进行过滤,以免带来安全问题。对URL传参进行非法字符过滤,用preg_match很容易判断非法的参数。

 代码如下 复制代码

if(!preg_match("/^[a-z0-9_\-]+$/i",$this->commentid))
    $this->_show_msg(L('illegal_parameters'));


这里$this->commentid就是从URL中$_GET方式传递过来的参数,接收URL$_GET方式传递的参数的时候也要进行处理,如:

 代码如下 复制代码

$this->commentid = isset($_GET['commentid']) && trim(urldecode($_GET['commentid'])) ? trim(urldecode($_GET['commentid'])) : $this->_show_msg(L('illegal_parameters'));

PHP开发安全问题不容忽视,这些很细小的问题很简单就可以处理,但是容易倏忽。很多的漏洞都是从这里找到的。

[!--infotagslink--]

相关文章

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

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

    这篇文章主要给大家介绍了一个关于JS正则匹配的踩坑记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-13
  • PHP正则表达式之捕获组与非捕获组

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