php 正则 不包含某字符串的正则表达式

常见函数 strstr($str, “abc”);
正则匹配 preg_match(”/(abc)?/is”, $str);
但是要匹配一个字符串中,不包含某字符串,用正则就比较麻烦了
如果不用正则 !strstr($str, “abc”); 就可以解决问题了
但是用正则呢,就只有这样了,”/^((?!abc).)*$/is”
//------------------------------------------------

代码如下:

<?php
$str = "dfadfadf765577abc55fd";
$pattern_url = "/^((?!abc).)*$/is";
if (preg_match($pattern_url, $str)){
echo "不含有abc!";
}else{
echo "含有abc!";
}
?>

//------------------------------------------------
结果为:false,含有abc!
$str = “2b3c4d5c”;
注意:[^(abc)] 这个语法是逐个检查$str中的字符是否不在 a b c中,
preg_match(”/[^(abc)]/s”, $str, $arr);
其中字符 2 就不在 a b c 中,所以$arr返回值为2;
同时匹配,包含字符串 “abc”,而且不包含字符串 “xyz”
“/(abc)[^((?!xyz).)*$]/s”

以下是补充:

判断一个字符串中是否含有另一字符串,有很多方法,如下:

1. 常见函数

strstr($str, "abc");

2. 正则匹配

preg_match("/(abc)/is", $str);

但是要匹配一个字符串中,不包含某字符串,用正则就比较麻烦了。
1. 如果不用正则如下就可以解决问题

!strstr($str, "abc");

2. 但是用正则呢,就只有这样了

preg_match("/^((?!abc).)*$/is", $str);

完整代码示例

代码如下:

$str = "dfadfadf765577abc55fd";
$pattern_url = "/^((?!abc).)*$/is";
if (preg_match($pattern_url, $str))
{
echo "不含有abc!";
}
else
{
echo "含有abc!";
}

结果为:false,含有abc!

同时匹配,包含字符串 "abc",而且不包含字符串 "xyz"的正则表达式:

preg_match("/(abc)[^((?!xyz).)*$]/is", $str);

该方法有效,本人使用方法如下:

(?:(?!<\/div>).|\n)*? //匹配不含</div>的一个字符串

但最终使用中结果是发现,该方法效率极其低下,在处理非常短文字(要匹配该正则式的相同部分的有十几个字,或者最多几十个)时间可以考虑使用,但当用于大篇幅文章解析或多处需要改种匹配时间应不使用,考虑用其他方法替代(如:先解析出要匹配该段正则式的文字,然后验证其中是否存在某段文字),正则表达式对于匹配不含特定字符串的文字段时并不是非常有效的方法.

(0)

相关推荐

  • php中字符串和正则表达式详解

    一.字符串类型的特点 1.PHP是弱类型语言,其他数据类型一般都可以直接应用于字符串函数操作. <?phpecho substr("123456",2,4);  //输出345echo substr(123456,2,4);    //输出345echo hello;                 //先查找hello常量,若没找到,将hello看做字符串使用?> 2.字符串可以作为"数组",是字符的集合. <?php$str = "w

  • php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串

    复制代码 代码如下: $str="你好<我>(爱)[北京]{天安门}"; echo f1($str); //返回你好 echo f2($str); //返回我 echo f3($str); //返回爱 echo f4($str); //返回北京 echo f5($str); //返回天安门 function f1($str) { $result = array(); preg_match_all("/^(.*)(?:<)/i",$str, $res

  • PHP提取字符串中的图片地址[正则表达式]

    复制代码 代码如下: <?php $str='<p><img border="0" src="upfiles/2009/07/1246430143_1.jpg" alt=""/></p>'; $pattern="/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.jpg]))[\'|\"].*?[\/]?>/"; preg_

  • PHP中用正则表达式清除字符串的空白

    如果您想要去掉字符串开始和结束的空白可以使用PHP内部函数trim() .但是, 我们经常想完全清除空白.需要把开始和结束的空白清除掉,将多个空白变为一个空白,使用一个规则来处理同样的类型的其它空白. 完成这些可以使用PHP的正则表达式来完成 下例可以去除额外Whitespace 复制代码 代码如下: <?php $str = " This line contains\tliberal \r\n use of whitespace.\n\n"; // First remove t

  • php 手机号码验证正则表达式

    比较简洁的代码一: $str = ''; $isMatched = preg_match('/^0?(13|14|15|17|18)[0-9]{9}$/', $str, $matches); var_dump($isMatched, $matches); 代码二 <?php //正则表达式 $tel = "15558530459"; //作者的手机号码,如果有疑问可以电话联系我,或者QQ联系我,我的QQ是mezongzi@qq.com if (strlen($tel) == &q

  • PHP提取字符串中的手机号正则表达式怎么写

    0. 简介 PHP通过正则表达式提取字符串中的手机号并判断运营商,简单快速方便,能提取多个手机号. 1. 代码 <?php header("content-type:text/plain;charset=utf-8"); function findThePhoneNumbers($oldStr = ""){ // 检测字符串是否为空 $oldStr=trim($oldStr); $numbers = array(); if(empty($oldStr)){ r

  • php 正则 不包含某字符串的正则表达式

    常见函数 strstr($str, "abc"); 正则匹配 preg_match("/(abc)?/is", $str); 但是要匹配一个字符串中,不包含某字符串,用正则就比较麻烦了 如果不用正则 !strstr($str, "abc"); 就可以解决问题了 但是用正则呢,就只有这样了,"/^((?!abc).)*$/is" //------------------------------------------------

  • php 字符串中是否包含指定字符串的多种方法

    编写程序的时候,经常要处理字符串,最基本就是字符串的查找,在php检测字符串中是否包含指定字符串可以使用正则,如果你对正则不了解,那么有几个函数可以为您提供方便. 1. strstr strstr() 函数搜索一个字符串在另一个字符串中的第一次出现. 该函数返回字符串的其余部分(从匹配点).如果未找到所搜索的字符串,则返回 false. 代码如下: <?php /*如手册上的举例*/ $email = 'user@example.com'; $domain = strstr($email, '@

  • 正则表达式匹配不包含某些字符串的技巧

    经常我们会遇到想找出不包含某个字符串的文本,程序员最容易想到的是在正则表达式里使用,^(hede)来过滤"hede"字串,但这种写法是错误的.我们可以这样写:[^hede],但这样的正则表达式完全是另外一个意思,它的意思是字符串里不能包含'h','e','d'三个但字符.那什么样的正则表达式能过滤出不包含完整"hello"字串的信息呢? 事实上,说正则表达式里不支持逆向匹配并不是百分之百的正确.就像这个问题,我们就可以使用否定式查找来模拟出逆向匹配,从而解决我们的问

  • 使用正则表达式找出不包含特定字符串的条目

    做日志分析工作的经常需要跟成千上万的日志条目打交道,为了在庞大的数据量中找到特定模式的数据,常常需要编写很多复杂的正则表达式.例如枚举出日志文件中不包含某个特定字符串的条目,找出不以某个特定字符串打头的条目,等等. 使用否定式前瞻 正则表达式中有前瞻(Lookahead)和后顾(Lookbehind)的概念,这两个术语非常形象的描述了正则引擎的匹配行为.需要注意一点,正则表达式中的前和后和我们一般理解的前后有点不同.一段文本,我们一般习惯把文本开头的方向称作"前面",文本末尾方向称为&

  • 用正则删除不包含某个字符串的行的代码

    先说一下这个可疑的ip,58.63.144.170,据说是一个弱智的蜘蛛,上帝保佑它下地狱. 看过apache日志的朋友应该知道,apache的访问日志的每一行是以访问者的ip开始的.因为日志比较大,所以我是用ultraedit来看的.用ultraedit的时候需要注意,它的正则一共有两种,一种是符合perl规范的,而默认的是ut自带的一种,写法比较特殊.本文中用到的正则表达式都是perl兼容的,ut中这个选项可以在"高级->配置->搜索->正则表达式引擎"中进行修改

  • java使用正则表达式查找包含的字符串示例

    本文实例讲述了java使用正则表达式查找包含的字符串.分享给大家供大家参考,具体如下: Hello.java: package hello; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Hello { public static void main(String[] args) { String re = "\\[([^\\]]+)\\]"; String str = &quo

  • JS不用正则验证输入的字符串是否为空(包含空格)的实现代码

    在项目中需要验证输入的字符串是否为空,包括空格,不太喜欢使用正则,所以就想到了js的indexOf函数,indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置,如果要检索的字符串值没有出现,则该方法返回 -1. 语法:stringObject.indexOf(searchvalue,fromindex),searchvalue必需,fromindex:可选参数,在字符串中开始检索的位置.它的合法取值是 0 到 stringObject.length - 1.如省略该参数,则将从

  • 正则表达式判断是否存在中文和全角字符和判断包含中文字符串长度

    判断是否存在中文和全角字符 str.match(/[^\x00-\xff]/ig) 判断包含中文字符串长度 aMatch=str.match(/[^\x00-\x80]/g); str.length+(!aMatch?0:aMatch.length) javascript 判断中文字符长度 一种: 复制代码 代码如下: function _length(str){ var len=0; for(var i=0;i<str.length;i++){ if(str.charAt(i)>'~'){l

  • 当ES6遇上字符串和正则表达式

    字符串是一种重要的数据类型,而正则表达式则是赋予了编程人员更多操作字符串的能力.ES6的创作者为字符串和正则表达式添加了许多的新功能.下面玲珑将来进行一个全面的总结. 字符串和正则两个部分各两节,全文阅读时间大约10分钟 字符串 1.更好的Unicode支持 Unicode是一个字符集.将全世界所有的字符包含在一个集合里,计算机只要支持这一个字符集,就能显示所有的字符,再也不会有乱码了. 在es6出现之前,js字符串一直基于16位字符编码进行构建.每16位序列是一个编码单元,代表一个字符,Uni

  • JS正则截取两个字符串之间及字符串前后内容的方法

    本文实例讲述了JS正则截取两个字符串之间及字符串前后内容的方法.分享给大家供大家参考,具体如下: 1.js截取两个字符串之间的内容: var str = "aaabbbcccdddeeefff"; str = str.match(/aaa(\S*)fff/)[1]; alert(str);//结果bbbcccdddeee 2.js截取某个字符串前面的内容: var str = "aaabbbcccdddeeefff"; tr = str.match(/(\S*)ff

随机推荐