精华内容
下载资源
问答
  • python 正则表达式解决包含不包含某字符串的问题 本测试使用python的re.compile与re.search作为方法测试包含error不包含abc的实例 python简单正则里只介绍到了不包含某字符的正则:[^1-9a-z],[^abc]也...

                python 正则表达式解决包含且不包含某字符串的问题

     

           本测试使用python的re.compile与re.search作为方法测试包含error不包含abc的实例

     

            python简单正则里只介绍到了不包含某字符的正则:[^1-9a-z],[^abc]也只能完成不匹配a、b、c三个字母的功能,但是这个并不能实现不匹配"abc“字符串的功能

     

    这里要用到正则表达式中的断言知识:

    (?=X )

    零宽度正先行断言。仅当子表达式 X 在 此位置的右侧匹配时才继续匹配。例如,/w+(?=/d) 与后跟数字的单词匹配,而不与该数字匹配。此构造不会回溯。

    (?!X)

    零宽度负先行断言。仅当子表达式 X 不在 此位置的右侧匹配时才继续匹配。例如,例如,/w+(?!/d) 与后不跟数字的单词匹配,而不与该数字匹配 。

    (?<=X)

    零宽度正后发断言。仅当子表达式 X 在 此位置的左侧匹配时才继续匹配。例如,(?<=19)99 与跟在 19 后面的 99 的实例匹配。此构造不会回溯。

    (?<!X)

    零宽度负后发断言。仅当子表达式 X 不在此位置的左侧匹配时才继续匹配。例如,(?<!19)99 与不跟在 19 后面的 99 的实例匹配

            从断言的表达形式可以看出,它用的就是分组符号,只不过开头都加了一个问号,这个问号就是在说这是一个非捕获组,这个组没有编号,不能用来后向引用,只能当做断言。(对于正则表达式的断言感兴趣的同学,可以再查一查资料,这里不多做赘述)

     

    所以这里我们不想匹配abc字符串就得用这个表达式: (?!abc)

    测试代码:

    import re
    p = re.compile(r'error(?!abc)'
    print p.search("errorabc")
    print p.search("errorab")

    结果:

    None

    <_sre.SRE_Match object at 0x7f129ce34b90>

     

    那么我想不匹配"error123bsc"这个字符串呢?你是不是以为 error.*(?!abc) 这么写这个正则就可以了,我们来试试

    import re
    p = re.compile(r'error.*(?!abc)'
    print p.search("error123abc")
    

    结果:

    <_sre.SRE_Match object at 0x7f129ce34bf8>

    看,失败了吧!那怎么写呢?这么写:error((?!abc).)*$

    知道了(?!abc),那么可以理解((?!abc).)*  的意思就是匹配  不含abc的字符(?!abc) 跟 任意字符. 的组合,出现任何次* 

    很多人会问,"$"不是匹配行末尾么,确实是这个意思,不明白请精度上面一句话再来看正则,然后我们来测一下:

    import re
    p = re.compile(r'error((?!abc).)*$')
    print p.search("error123abc")
    print p.search("error123abc123")
    print p.search("error123ab123")

    结果:

    None

    None

    <_sre.SRE_Match object at 0x7f129ce81a08>

    明白了吧!

     

    以此类推,你要是想匹配包含error不包含error前后的abc,那么应该是这么写这个正则: 

    测一下:

    import re
    p = re.compile(r'^((?!abc).)*error((?!abc).)*$')
    print p.search("123abc123error123")
    print p.search("123ab123error123")

    结果:

    None

    <_sre.SRE_Match object at 0x7f129ce81a08>

     

    我们要是想匹配包含error不包含多个字符串,比如abc和def,这么写正则: error((?!(abc|def)).)*$

    测试:

    import re
    p = re.compile(r'error((?!(abc|def)).)*$')
    print p.search("error123abc234")
    print p.search("error123ab234")
    print p.search("error123def234")

    结果:

    None

    <_sre.SRE_Match object at 0x7f87973eccf0>

    None

     

     

     

    测试完成!

     

     

     

    展开全文
  • 正则表达式—不含特定字符串

    千次阅读 2015-05-20 23:01:00
    1.正则表达式中有(?=string)和(?!string)来表示我们是否...注意:区别于[^string],该表达式表示的是:在匹配的字符串中,含有字符集中的任意字符,该字符集是由string的各个字符构成。//*作者:守静居士 //*转载

    1.正则表达式中有(?=string)和(?!string)来表示我们是否需要匹配某个东西。
    例一 取出不含有word的部分
    这里写图片描述
    例二 取出含有word的

    这里写图片描述

    例三 以abcd打头,以1234结尾,且中间不能有abcd和1234
    这里写图片描述

    注意:区别于[^string],该表达式表示的是:在匹配的字符串中,不含有字符集中的任意字符,该字符集是由string的各个字符构成。

    //*作者:守静居士
    //*转载请注明出处:
    http://blog.csdn.net/csp277/article/details/
    //*时间:20150520

    展开全文
  • 字符串正则表达式

    2015-10-15 17:59:04
    字符串正则表达式 1、字符串 String类对象是可改变的,对于String对象的重新赋值在本质上是重新创建了一个String对象并将新值赋予该对象,其方法ToString对性能的提高并非很显著。 因为一旦创建了该对象,就...

    字符串与正则表达式

    1、字符串

    String类对象是不可改变的,对于String对象的重新赋值在本质上是重新创建了一个String对象并将新值赋予该对象,其方法ToString对性能的提高并非很显著。 因为一旦创建了该对象,就不能修改该对象的值

    在处理字符串时,最好使用StringBuilder类,其.NET 命名空间是System.Text。该类并非创建新的对象,而是通过Append,Remove,Insert等方法直接对字符串进行操作,通过ToString方法返回操作结果,因此,当你需要大量拼接、删除、修改字符串使用 StringBuilder 可以优化性能


    2、正则表达式
    正则表达式提供了功能强大、灵活而又高效的方法来处理文本。
    正则表达式:用某种模式去匹配指定字符串的一种表示方式。正则表达式由普通字符和元字符组成。
    普通字符:常使用的字符如字母、数字、汉字等
    元字符:可以匹配某些字符形式的具有特殊含义的字符,其作用类似于DOS命令使用的通配符。
    正则表达式基本书写符号
    正则表达式限定符
    3. 匹配字符集
      (1) 匹配字符集是预定义的用于正则表达式中的符号集。
      (2) 如果字符串与字符集中的任何一个字符相匹配,它就会找到这个匹配项。
    字符描述
    \将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。
    ^匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。
    $匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。
    *匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
    +匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
    ?匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
    {n}n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
    {n,}n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
    {n,m}m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。
    ?当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。
    .匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。
    (pattern)匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 '\(' 或 '\)'。
    (?:pattern)匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。
    (?=pattern)正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
    (?!pattern)负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
    x|y匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。
    [xyz]字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。
    [^xyz]负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。
    [a-z]字符范围。匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。
    [^a-z]负值字符范围。匹配任何不在指定范围内的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。
    \b匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
    \B匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
    \cx匹配由 x 指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
    \d匹配一个数字字符。等价于 [0-9]。
    \D匹配一个非数字字符。等价于 [^0-9]。
    \f匹配一个换页符。等价于 \x0c 和 \cL。
    \n匹配一个换行符。等价于 \x0a 和 \cJ。
    \r匹配一个回车符。等价于 \x0d 和 \cM。
    \s匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
    \S匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
    \t匹配一个制表符。等价于 \x09 和 \cI。
    \v匹配一个垂直制表符。等价于 \x0b 和 \cK。
    \w匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
    \W匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。
    \xn匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,'\x41' 匹配 "A"。'\x041' 则等价于 '\x04' & "1"。正则表达式中可以使用 ASCII 编码。.
    \num匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,'(.)\1' 匹配两个连续的相同字符。
    \n标识一个八进制转义值或一个向后引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为向后引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。
    \nm标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式,则 nm 为向后引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。
    \nml如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。
    \un匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如, \u00A9 匹配版权符号 (?)。
      各种操作符的运算优先级
    相同优先级的从左到右进行运算,不同优先级的运算先高后低。各种操作符的优先级从高到低如下:
    操作符描述
    \转义符
    (), (?:), (?=), []圆括号和方括号
    *, +, ?, {n}, {n,}, {n,m}限定符
    ^, $, \anymetacharacter位置和顺序
    |“或”操作

    4. 分组构造
    5. 正则表达式举例
    非负整数:“^\d+$ ”
    正整数: “ ^[0-9]*[1-9][0-9]*$”
    非正整数: “ ^((-\d+)|(0+))$”
    整数: “ ^-?\d+$”
    英文字符串: “ ^[A-Za-z]+$”
    英文字符数字串: “ ^[A-Za-z0-9]+$”
    英数字加下划线串: “^\w+$”
    E-mail地址:“^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$”
    URL:“^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$”

    2  Regex类

    Regex 类表示不可变(只读)正则表达式类。它还包含各种静态方法,允许在不显式创建其他类的实例的情况下使用其他正则表达式类。
        Regex 类在System.Text.RegularExpressions命名空间下。
        这里仅介绍IsMatch方法。
    IsMatch方法:正则表达式在输入字符串中是否找到匹配项。
    该方法有四种重载的形式:
    public bool IsMatch(string str);
         表示在构造函数中指定的正则表达式在str中是否找到匹配项。
    public bool IsMatch(string str, int start);
       表示在构造函数中指定的正则表达式在str的指定起始位置开始是否找到匹配项。参数start表示开始搜索的字符位置。
    public static bool IsMatch(string str, string pattern);
        表示使用pattern参数中指定的正则表达式是否在str中找到匹配项。
    public static bool IsMatch(string str, string pattern, RegexOptions options);
        表示使用pattern参数中指定的正则表达式和options枚举提供的匹配选项在input中是否找到匹配项。其中options是RegexOption枚举值的按位“或”组合。
    例:
               Regex r  =   new  Regex( @" [0-9a-z]{3,5} " );
                
    string [] tests  =   {"abc""123456""(aa22bb33)""ab"} ;
                
    foreach  ( string  test  in  tests)
                
    {
                    
    if (r.IsMatch(test))
                    
    {
                        Console.WriteLine(
    "{0}中有匹配的项", test);
                    }

                    
    else
                    
    {
                        Console.WriteLine(
    "{0}中没有匹配的项", test);
                    }

                }

    3  Match类

    Match类表示单个正则表达式匹配操作的结果,得到的结果是只读的。该类没有公共构造函数,而是用Regex对象的Match方法返回的结果创建该类的对象。
    例如:
         Regex r  =   new  Regex( " abc " );
         Match m 
    =  r.Match( " 123abc456 " );
         
    if  (m.Success)
         

             Console.WriteLine(
    "找到匹配位置:" + m.Index);
             Console.WriteLine(
    "找到匹配结果:" + m.Value);
         }

    运行结果:
    找到匹配位置:3
    找到匹配结果:abc
    4  MatchCollection类
    MatchCollection类表示成功的非重叠匹配的序列,得到的集合是只读的。该类同样没有公共构造函数,而是用Regex.Matches方法返回的结果创建该类的对象。
    例如:
         Regex r  =   new  Regex( " abc " );
        MatchCollection mc 
    =  r.Matches( " 123abc4abcd " );
        
    int  count  =  mc.Count;
        String[] results 
    =   new  String[count];
        
    int [] matchPosition  =   new   int [count];
        
    for  ( int  i  =   0 ; i  <  count; i ++ )
        
    {
             results[i] 
    = mc[i].Value;
             matchPosition[i] 
    = mc[i].Index;
             Console.WriteLine(
    "第{0}个匹配结果:{1},位置:{2}",i+1, results[i],      matchPosition[i]);
        }

    运行结果:
    第1个匹配结果:abc,位置:3
    第2个匹配结果:abc,位置:7
    5.5  Group类
    Group类表示单个捕获组的结果。当与正则表达式匹配的子字符串有多组时,可以使用该类得到某一组的结果。例如:
                 string  text  =   " One car red car blue car " ;
                  
    string  pat  =   @" (w+)s+(car) " ;
                 Regex r 
    =   new  Regex(pat, RegexOptions.IgnoreCase);
                 Match m 
    =  r.Match(text);
                 
    int  matchCount  =   0 ;
                 
    while  (m.Success)
                 
    {
                      Console.WriteLine(
    "Match" + (++matchCount));
                      
    for (int i = 1; i <= 2; i++)
                      
    {
                         Group g 
    = m.Groups[i];
                         Console.WriteLine(
    string.Format("Group{0}='{1}'", i, g));
                         CaptureCollection cc 
    = g.Captures;
            
    for (int j = 0; j < cc.Count; j++)
                    
    {
                        Capture c 
    = cc[j];
                        Console.WriteLine(
    string.Format(
                             
    "Capture{0}='{1}', Position={2}", j, c, c.Index));
                    }

                }

                m 
    = m.NextMatch();
            }

            Console.ReadLine();

    输出结果:
    Match1
    Group1='One'
    Capture0='One', Position=0
    Group2='car'
    Capture0='car', Position=4
    Match2
    Group1='red'
    Capture0='red', Position=8
    Group2='car'
    Capture0='car', Position=12
    Match3
    Group1='blue'
    Capture0='blue', Position=16
    Group2='car'
    Capture0='car', Position=21
    展开全文
  • --php字符串的特点非字符串类型数据用在字符串处理函数中,会自动转化为字符串后,再进行处理。比如 strsub(123456789,2,4); //得到"3456"可以将字符串视为数组,当做...//输出"c"//这种用法多用于取字符串中的几...

    --php字符串的特点

    非字符串类型数据用在字符串处理函数中,会自动转化为字符串后,再进行处理。比如 strsub(123456789,2,4); //得到"3456"

    可以将字符串视为数组,当做字符集合来看待。比如:

    $str="abcdefg";

    echo$str[2];//能输出"c",但容易让人误认为str是数组,所以用下面的

    echo$str{2};//输出"c"

    //这种用法多用于取字符串中的某几个字符,比如取第0个和第3个字符

    echo$str{0}.$str{3}//第0个连接第3个

    --在php中所有字符串处理函数,都不是在原字符串上做修改,都是返回一个修改过的新字符串。

    --常用的字符串输出函数

    echo() //系统指令,可以echo "",也可以echo("")

    die() //exit()的别名,可以打印一个字符串,推出Php程序。例如

    //如果打开失败,就打印“打开文件失败”并推出php程序

    fopen("1.php","r")ordie("打开文件失败");

    print() //作用和echo类似,但有返回值(成功返回1,失败返回0),执行效率没echo高,用的很少

    printf() //格式化输出函数,和c语言一样

    sprintf() //和printf功能唯一的差别是,它返回一个格式化的字符串,而不是像标准输出设备输出

    --常用字符串处理函数

    过滤左右两边的空白字符(包括空格,制表符,换行等)

    string rtrim ( string str [, string charlist] )

    //没有第2个参数时,去掉右边空白;第2个参数可以定义需要过滤的特定字符,可以有多个

    string ltrim ( string str [, string charlist] )

    //没有第2个参数时,去掉左边空白;第2个参数可以定义需要过滤的特定字符,可以有多个

    string trim ( string str [, string charlist] ) //没有第2个参数时,去掉左、右空白;第2个参数可以定义左右两边需要过滤的特定字符,可以有多个,比如:

    $hello="Hello World";

    $trimmed= trim($hello,"Hdle");

    var_dump($trimmed);

    将输出:

    string(5) "o Wor"

    填充空白字符(根据参数还可以填充其他字符)

    string str_pad ( string input, int pad_length [, string pad_string [, int pad_type]] ) //没有参数3的话,就按pad_length填充空白,有参数3的话,就按参数3填充。pad_type定义了填充的方式。

    大小写转换

    strtoupper() //全转换为大写字母

    strtolower() //全转换为小写字母

    ucfirst() //整个字符串的第1个字母,转换为大写字母

    ucwords() //每个单词的第1个字母,转换为大写字母

    和Html标签相关的字符串处理函数

    nl2br() //将字符串中的回车转换为
    ,以在网页中显示为换行。

    htmlspecialchars() //将字符串里的html标签转换为实体。比如:

    $new= htmlspecialchars("Test", ENT_QUOTES);

    echo$new;// <a href='test'>Test</a>

    string stripslashes ( string str ) //去掉字符串里面的反斜杠"\"。(一个反斜杠直接去掉;两个反斜杠,去掉一个)

    string strip_tags ( string str [, string allowable_tags] ) //去掉str里面的html里面的html标签,allowable_tags是允许保留的html标签

    其他字符串处理函数

    string number_format ( float number [, int decimals [, string dec_point, string thousands_sep]] ) //将数字按照规定格式,转化为字符串。decimals规定了保留的小数位数,dec_point规定了小数点的表示方法,thousands_sep规定了千分位的表示方法。

    string strrev ( string string ) //反转字符串

    string md5 ( string str [, bool raw_output] ) //计算字符串的md5码

    --字符串比较函数

    按字节顺序比较(比较ascii的大小)

    int strcmp ( string str1, string str2 ) //str1大于str2,返回1;str1等于str2,返回0;str1小于str2,返回-1。区分大小写。

    int strcasecmp ( string str1, string str2 ) //忽略大小写,进行比较。

    按自然数排序

    int strnatcmp ( string str1, string str2 ) //按自然数排序的话,s2小于s12

    --正则表达式

    定义:描述字符串排列模式的一种自定义语法规则。

    擅长做的事:字符串的分割、匹配、查找、替换。

    效率:效率比函数低。如果使用函数能做,就不要使用正则。

    应用领域:可以在很多计算机语言中使用。

    本质:正则表达式也是一个字符串,这个字符串是一些字符按照特定规则组成字符串。它配合函数一起使用,使用时作为模式与输入字符串比较,再进行查找匹配、替换、分割。

    --在php中提供了两套正则表达式函数库:

    POSIX扩展正则表达式函数库(以ereg_开头)

    Perl兼容正则表达式函数库(以preg_开头。推荐使用,效率高)

    --正则表达式的模式如何编写

    语法(任何一个正则表达式都有4部分组成):

    定界符号:规定了模式的开始和结束。(除了字母,数字,反斜杠"\"以外的任何字符都可以做定界符。比如## !! {} ||)

    原子:正则表达式的最基本单位。每个正则表达式必须至少包含一个原子。只要一个正则表达式可以单独使用的字符,就是原子。

    所有打印字符(所有可以在屏幕上输出的字符)和非打印字符(空格、回车等)。

    有意义的字符(比如. * ? < >  ()  /)想做原子使用的话,统统使用反斜杠"\"转义字符转义。转义字符可以将有意义的字符转为无意义的,也可以将无意义的字符转为有意义的(比如:转为代表范围的原子)。

    可以使用代表范围的原子(系统给的)。

    \d表示任意一个十进制的数字。

    \D 表示任意一个非数字的字符。

    \s 表示任意一个空白字符。(空格、\t、\r、\n、\f)

    \S 表示任意一个非空白字符。

    \w 表示任意一个字a-zA-Z0-9_(下划线也被认为是字)

    \W 表示任意一个非字。

    自己定义的原子表[],可以匹配方括号中的任意一个原子。

    方括号内也可以表示范围,用横线表示。比如a至z,表示为[a-z]

    [^]表示取反,除了方块号内的原子,都算匹配。(^必须在方括号的第一个字符处出现)

    .可以匹配除换行符以外的任意字符。

    元字符:是一种特殊字符,用来修饰原子的,不可以单独出现。

    * 表示其修饰的原子可以出现0次,1次,或多次。

    + 表示其修饰的原子可以出现1次或多次。(最少要有1次)

    ? 表示其修饰的原子可以出现0次或1次。

    {} 自定义其修饰原子出现的次数。

    {m} //m为整数,表示修饰的原子出现m次。(固定次数)

    {m,n} //m、n都为整数,m

    {m,} //m为整数,表示修饰的原子出现最少m次,最多无限。

    ^ 直接在一个正则表达式的第1个字符出现,则表示这个模式必须在字符串的一行的开头处就能匹配。

    $ 直接在一个正则表达式的最后1个字符出现,则表示这个模式必须在字符串的一行的结尾处能够匹配。

    | 表示或的关系。它的优先级最低,最后考虑它的功能。例如"/cat|dog/",不是匹配t与d,而是匹配cat与dog。

    \b 表示一个边界。

    \B 表示一个非边界。

    ()

    作为大原子使用。(整个括号中的内容作为一个整体)

    改变优先级,加上括号可以提高优先级。

    作为子模式使用。正则表达式不只对一个字符串匹配1次,它先用整个正则表达式作为一个大模式和字符串匹配,得到的匹配结果放到数组的第1个元素中,然后用每个()中的内容作为一个子模式和字符串匹配,得到的匹配结果顺序放到数组的其他元素中。

    可以取消子模式,只是将()作为大原子或改变优先级使用,在括号中的最前面使用“?:”就可以取消()表示的子模式。

    逆向引用。

    模式修正符号

    --元字符的优先级

    从高到低分下面几个级别,相同级别的按从左到右依次出现才次序。

    \//转义字符最高

    () (?:) []      //括号次之

    * + ? {}        //表示数量的

    ^ $ \b          //表示位置的

    |               //或的优先级最低

    --模式修正符

    格式:"/   /模式修正符"

    内容:就是几个字母。可以一次使用一个(每个都有一定的意义),也可以连续使用多个。

    作用:是对整个正则表达式调优用的,也可以说是对正则表达式功能的扩展。

    常用模式修正符:

    i 在和模式进行匹配时,不区分大小写。

    m 将字符串视为多行(默认视为一行),看成多行后,^ $就能和每一行的开始和结束处匹配。

    s 如果没有这个模式修正符,元字符"."默认将不能匹配换行"\n"。

    x 模式中的空白忽略不计。

    e 专门用在preg_replace函数中。使用\e模式后,就可以在replacement参数中使用函数。

    A 字符串的开头必须和模式匹配,比如"/one/A",作用和"/^one/"一样。

    Z 字符串的结尾必须和模式匹配,比如"/one/Z",作用和"/one$/"一样。

    U 关闭贪婪模式。

    --关于正则表达式的贪婪模式

    正则表达式默认是比较“贪婪”的,即.*(或者.+)会尽量往后匹配所有能匹配的字符。比如

    "/\.*\/"去匹配"phpaalampcc"会匹配到phpaalamp

    .*会尽量往后匹配,一直到最后一个。

    而我们有的时候想让匹配到第一个就行,就要关闭贪婪模式。

    关闭贪婪模式有两种方法:

    使用模式修正符U关闭贪婪模式。

    "/\.*\/U"去匹配"phpaalampcc"会匹配到php

    使用?关闭贪婪模式。比如:

    "/\(.*?)\/"去匹配"phpaalampcc"会匹配到php

    如果这两种方法同时使用,就又开启了贪婪模式,所以不要同时使用。

    --字符串处理函数用于字符串查找

    string strstr ( string haystack, string needle )

    Returns part of haystack string from the first occurrence of needle to the end of haystack.

    If needle is not found, returns boolean FALSE.

    如果needle是个数字,那么会将他作为一个字符的ascii的值,查找该值所对应的字符。比如strstr($haystack,100) //字符d的ascii为100,那么就会在haystack里面查找字符d.

    区分大小写。

    string stristr ( string haystack, string needle )

    与strstr()作用一样,不区分大小写。

    int strpos ( string haystack, mixed needle [, int offset] )

    Returns the numeric position of the first occurrence of needle in the haystack string.

    If needle is not found, strpos() will return booleanFALSE.

    offset规定了从第几个字符开始查找,默认为0.

    区分大小写额。

    int stripos ( string haystack, mixed needle [, int offset] )

    与strpos()作用一样,不区分大小写。

    int strrpos ( string haystack, string needle [, int offset] )

    与strpos()作用一样,不同的是查找needle最后一次出现的位置。

    --正则表达式字符串的匹配

    作用:通常用在字符串的验证上,验证字符串是否符合某模式。

    使用函数:

    int preg_match ( string pattern, string subject [, array matches [, int flags]] )

    在 subject 字符串中搜索与 pattern 给出的正则表达式相匹配的内容。

    返回 pattern 所匹配的次数。要么是 0 次(没有匹配)或 1 次,因为 preg_match() 在第一次匹配之后将停止搜索。

    如果提供了 matches,则其会被搜索的结果所填充。$matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推。

    int preg_match_all ( string pattern, string subject, array matches [, int flags] )

    在 subject 中搜索所有与 pattern 给出的正则表达式匹配的内容并将结果以 flags 指定的顺序放到 matches 中。

    搜索到第一个匹配项之后,接下来的搜索从上一个匹配项末尾开始。

    返回整个模式匹配的次数(可能为零),如果出错返回 FALSE。

    --字符串处理函数用于字符串替换

    mixed str_replace ( mixed search, mixed replace, mixed subject [, int &count] ) 在subject中查找所有search,找到后用replace替换。count返回替换的次数。     有3种使用情况:

    str_replace(string,string,string) //用字符串替换字符串

    str_replace(array,string,string) //把数组里面出现的字符串,都统一替换为一个字符串。比如可以将数组设为要过滤的关键字,都统一替换为**

    str_replace(array,array,string) //将数组的内容一一对应替换,两个数组元素个数要一样。第2个数组参数常用数组函数array_map()生成。

    --正则表达式字符串的替换

    mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] )

    在 subject 中搜索 pattern 模式的匹配项并替换为 replacement。如果指定了 limit,则仅替换 limit 个匹配,如果省略 limit 或者其值为 -1,则所有的匹配项都会被替换。

    用法1:用字符串替换模式匹配项。replacement是字符串的时候,就可以用这个字符串替换所有匹配的字符。

    用法2:用子模式替换模式匹配项。replacement是子模式的时候,可以用这个子模式替换所有匹配的字符。子模式用\n(双引号中用\\n) 形式或${n}(双引号中用\${n})(n 可以从 0 到 99,其中 \\0 或 $0 指的是被整个模式所匹配的文本。对左圆括号从左到右计数(从 1 开始)以取得子模式的数目。)

    用法3:replacement中使用函数。需要在pattern中使用模式修正符/e,例如:preg_replace ("/(]*>)/e",

    "'\\1'.strtoupper('\\2').'\\3'",

    $html_body);  //这将使输入字符串中的所有 HTML 标记变成大写。

    用法4:就是在前两个参数中都使用数组,一次可以将多个模式替换成多个值。

    --字符串处理函数用于字符串分割

    array explode ( string separator, string string [, int limit] )

    使用情景:按特定的字符或字符串去分割。

    此函数返回由字符串组成的数组,每个元素都是 string 的一个子串,它们被字符串 separator 作为边界点分割出来。如果设置了 limit 参数,则返回的数组包含最多 limit 个元素,而最后那个元素将包含 string 的剩余部分。

    如果 separator 为空字符串(""),explode() 将返回 FALSE。如果 separator 所包含的值在 string 中找不到,那么 explode() 将返回包含 string 单个元素的数组。

    string implode ( string glue, array pieces ) 别名jion()

    Returns a string containing a string representation of all the array elements in the same order, with the glue string between each element.比如:

    $array=array('lastname','email','phone');

    $comma_separated= implode(",",$array);

    echo$comma_separated;// lastname,email,phone

    --正则表达式字符串的分割

    array preg_split ( string pattern, string subject [, int limit [, int flags]] )

    使用情景:按某个模式去分割。 (比如按数字,或者按标点)

    返回一个数组,包含 subject 中沿着与 pattern 匹配的边界所分割的子串。

    如果指定了 limit,则最多返回 limit 个子串,如果 limit 是 -1,则意味着没有限制。比如:

    $keywords= preg_split ("/[\s,]+/","hypertext language, programming");//返回字符串中的各个单词

    --正则表达式数组的匹配

    array preg_grep ( string pattern, array input [, int flags] )

    preg_grep() 返回一个数组,其中包括了 input 数组中与给定的 pattern 模式相匹配的单元。

    --转义正则表达式特殊字符

    string preg_quote ( string str [, string delimiter] )

    preg_quote() 以 str 为参数并给其中每个属于正则表达式语法的字符前面加上一个正斜线"\"。如果你需要以动态生成的字符串作为模式去匹配则可以用此函数转义其中可能包含的特殊字符。

    展开全文
  • 在Python开发过程中,为了实现某项功能,经常需要对某些字符串进行特殊处理,如拼接字符串、截取字符串、格式化字符串等。下面将对Python中常用的字符串操作方法进行介绍。 5.1.1 拼接字符串 使用“+” 运算符可...
  • 匹配包含换行符(回车)的任意字符串正则表达式 正则表达式Java  匹配包含换行符(回车)的任意字符串正则表达式 1) [\s\S] 2) Pattern.DOTALL \s 匹配字符串的过程中经常会用到能够匹配...
  • 正则——字符串完全匹配

    万次阅读 2019-03-19 14:27:24
    请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。 //s字符串 ...
  • 正则最重要的功能就是处理字符串,例如检索你在一段字符串中的特定单词,或者将原来某个位置的特定字符换成你想要的字符。而对于爬虫来说,正则表达式是必可少的技能之一,要想正确提取源代码中你想要的信息内容...
  • 字符串对象、object对象、集合(array)对象、数组对象、I/O流(File)、Socket 字符串对象 String对象 1,定义:是一连串字符组成,是引用类型; 2,string关键字是System.String类的别名; 3,字符串初始化之后...
  • 当连接大量或很长的字符串时,join数组成员的方法是ie7以及以下的版本中性能最高的,但是在其他的现代浏览器中,join数组成员是最慢的,推荐使用简单的+和+=替代,同时要避免不必要的中间字符串。 回溯既是正则...
  • 数组的常用方法 ...pop 该方法用于从数组的末尾移除一 并返回该 3.unshift 该方法用于往数组的头部增加一 并返回数组的长度 shift 该方法用于从数组的头部移除一 并返回该 conca...
  • JAVA SE自学 基础篇 常用...使用正则表达式校验及提取字符串 System, Runtime 8大基本类型的包装类 使用Math进行数学运算 随机处理 使用BigDecimal和BigInteger进行货币运算 使用Date, Calendar,== SimpleDateForma...
  • 1.字符串本质:由若干字符构成。 字符集:赋值一个编码到字符,以便在内存中表示 编码Encoding:转换字符到原始字节形式 解码Decoding:依据编码名称转换原始字节到字符的过程 注:内存中总是存储解码以后的文本,...
  • 42_Pandas字符串中提取正则表达式来生成新列 如何通过从以字符串为元素的pandas.DataFrame列和pandas.Series中提取带有正则表达式的特定字符串来生成新列。 使用以下字符串方法。 str.extract():仅提取第一个...
  • R语言︱文本(字符串)处理与正则表达式

    万次阅读 多人点赞 2016-04-11 15:22:41
    处理文本是每一种计算机语言都应该具备的功能,但不是每一种语言都侧重于处理文本。R语言是统计的语言,处理文本不是它的强项,perl语言这方面的功能比R不知要强多少倍。...高效处理文本少不了正则表达式
  • 工作中数据的处理中往往会遇到筛选出符合条件的或者...首先看一下,怎么筛选出包含某些字符串的数据 #这是使用语法,模糊匹配 df[ df['通信名称'].str.contains('联通|移动|小灵通|电信')] #..
  • 使用字符串匹配并且开启使用正则表达式匹配的模式,我们使用匹配字符串开头和结尾的方式来完成字符串的替换。那么我们需要匹配所有:     以https://开头的并且以.com/结尾的字符串 匹配上述模式的...
  • 正则表达式学习 一、需求 要求长度为8-9位,开头是字母 ,必须有数字,必须有下划线 二、思路解析 写法1:^[a-zA-Z](?=.*_)(?=.*\d).{7,8}$ 首先,开头是固定的,以字母开头,所以可以这样写 ^[a-zA-Z]; ...
  • 在插入模式下,为了减少重复的击键输入,VIM 提供了若干快捷键,当你要输入某个上下文曾经输入过的字符串时,你只要输入开头若干字符,使用快捷键,VIM 将搜索上下文,找到匹配字符串,把剩下的字符补全,你就不必敲...
  • ...level3=50014075\" ...level3=50014759\" ...level3=50013888\" ...我只想匹配出第一条字符串想要其它的。其它的包括“&”。类似正则可以肿莫写? level3.php\?cat=[^&].*?" 貌似不对。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 33,563
精华内容 13,425
关键字:

不包含某项字符串的正则