正则表达式_正则表达式python - CSDN
正则表达式 订阅
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。 展开全文
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。
信息
代码简写
regex、regexp或RE
行业归属
计算机科学
作    用
用来检索、替换那些符合某个模式(规则)的文本
中文名
正则表达式
外文名
Regular Expression
别    称
规则表达式
正则表达式概念
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
收起全文
精华内容
参与话题
  • Python-正则表达式

    千人学习 2019-10-31 15:05:33
    正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本...
  • 史上最全的正则表达式-匹配中英文、字母和数字

    万次阅读 多人点赞 2018-07-19 16:14:27
    在做项目的过程中,使用正则表达式来匹配一段文本中的特定种类字符,是比较常用的一种方式,下面是对常用的正则匹配做了一个归纳整理。 1、匹配中文:[\u4e00-\u9fa5] 2、英文字母:[a-zA-Z] 3、数字:[0-9] 4、匹配...

    在做项目的过程中,使用正则表达式来匹配一段文本中的特定种类字符,是比较常用的一种方式,下面是对常用的正则匹配做了一个归纳整理。

    1、匹配中文:[\u4e00-\u9fa5]

    2、英文字母:[a-zA-Z]

    3、数字:[0-9]

    4、匹配中文,英文字母和数字及下划线:^[\u4e00-\u9fa5_a-zA-Z0-9]+$
    同时判断输入长度:
    [\u4e00-\u9fa5_a-zA-Z0-9_]{4,10}

    5、
    (?!_)  不能以_开头
    (?!.*?_$)  不能以_结尾
    [a-zA-Z0-9_\u4e00-\u9fa5]+  至少一个汉字、数字、字母、下划线
    $  与字符串结束的地方匹配

    6、只含有汉字、数字、字母、下划线,下划线位置不限:
    ^[a-zA-Z0-9_\u4e00-\u9fa5]+$

    7、由数字、26个英文字母或者下划线组成的字符串
    ^\w+$

    8、2~4个汉字
    "^[\u4E00-\u9FA5]{2,4}$";

    9、最长不得超过7个汉字,或14个字节(数字,字母和下划线)正则表达式
    ^[\u4e00-\u9fa5]{1,7}$|^[\dA-Za-z_]{1,14}$
     

    10、匹配双字节字符(包括汉字在内):[^x00-xff]
    评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

    11、匹配空白行的正则表达式:ns*r
    评注:可以用来删除空白行

    12、匹配HTML标记的正则表达式:<(S*?)[^>]*>.*?|<.*? />
    评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力

    13、匹配首尾空白字符的正则表达式:^s*|s*$
    评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式

    14、匹配Email地址的正则表达式:^[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$

    评注:表单验证时很实用

    15、手机号:^((13[0-9])|(14[0-9])|(15[0-9])|(17[0-9])|(18[0-9]))\d{8}$

    16、身份证:(^\d{15}$)|(^\d{17}([0-9]|X|x)$)

    17、匹配网址URL的正则表达式:[a-zA-z]+://[^s]*
    评注:网上流传的版本功能很有限,上面这个基本可以满足需求

    18、匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
    评注:表单验证时很实用


    19、匹配国内电话号码:d{3}-d{8}|d{4}-d{7}
    评注:匹配形式如 0511-4405222 或 021-87888822

    20、匹配腾讯QQ号:[1-9][0-9]{4,}
    评注:腾讯QQ号从10000开始

    21、匹配中国邮政编码:[1-9]d{5}(?!d)
    评注:中国邮政编码为6位数字

    22、匹配身份证:d{15}|d{18}
    评注:中国的身份证为15位或18位

    23、匹配ip地址:d+.d+.d+.d+
    评注:提取ip地址时有用


    24、匹配特定数字:
    ^[1-9]d*$    //匹配正整数
    ^-[1-9]d*$   //匹配负整数
    ^-?[1-9]d*$   //匹配整数
    ^[1-9]d*|0$  //匹配非负整数(正整数 + 0)
    ^-[1-9]d*|0$   //匹配非正整数(负整数 + 0)
    ^[1-9]d*.d*|0.d*[1-9]d*$   //匹配正浮点数
    ^-([1-9]d*.d*|0.d*[1-9]d*)$  //匹配负浮点数
    ^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$  //匹配浮点数
    ^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$   //匹配非负浮点数(正浮点数 + 0)
    ^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$  //匹配非正浮点数(负浮点数 + 0)
    评注:处理大量数据时有用,具体应用时注意修正


    25、匹配特定字符串:
    ^[A-Za-z]+$  //匹配由26个英文字母组成的字符串
    ^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串
    ^[a-z]+$  //匹配由26个英文字母的小写组成的字符串
    ^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串
    ^w+$  //匹配由数字、26个英文字母或者下划线组成的字符串

    26、
    在使用RegularExpressionValidator验证控件时的验证功能及其验证表达式介绍如下:
    只能输入数字:“^[0-9]*$”
    只能输入n位的数字:“^d{n}$”
    只能输入至少n位数字:“^d{n,}$”
    只能输入m-n位的数字:“^d{m,n}$”
    只能输入零和非零开头的数字:“^(0|[1-9][0-9]*)$”
    只能输入有两位小数的正实数:“^[0-9]+(.[0-9]{2})?$”
    只能输入有1-3位小数的正实数:“^[0-9]+(.[0-9]{1,3})?$”
    只能输入非零的正整数:“^+?[1-9][0-9]*$”
    只能输入非零的负整数:“^-[1-9][0-9]*$”
    只能输入长度为3的字符:“^.{3}$”
    只能输入由26个英文字母组成的字符串:“^[A-Za-z]+$”
    只能输入由26个大写英文字母组成的字符串:“^[A-Z]+$”
    只能输入由26个小写英文字母组成的字符串:“^[a-z]+$”
    只能输入由数字和26个英文字母组成的字符串:“^[A-Za-z0-9]+$”
    只能输入由数字、26个英文字母或者下划线组成的字符串:“^w+$”
    验证用户密码:“^[a-zA-Z]w{5,17}$”正确格式为:以字母开头,长度在6-18之间,
    只能包含字符、数字和下划线。
    验证是否含有^%&',;=?$"等字符:“[^%&',;=?$x22]+”
    只能输入汉字:“^[u4e00-u9fa5],{0,}$”
    验证Email地址:“^w+[-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$”
    验证InternetURL:“^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$”
    验证身份证号(15位或18位数字):“^d{15}|d{}18$”
    验证一年的12个月:“^(0?[1-9]|1[0-2])$”正确格式为:“01”-“09”和“1”“12”
    验证一个月的31天:“^((0?[1-9])|((1|2)[0-9])|30|31)$”
    正确格式为:“01”“09”和“1”“31”。
    匹配中文字符的正则表达式: [u4e00-u9fa5]
    匹配双字节字符(包括汉字在内):[^x00-xff]
    匹配空行的正则表达式:n[s| ]*r
    匹配HTML标记的正则表达式:/<(.*)>.*|<(.*) />/
    匹配首尾空格的正则表达式:(^s*)|(s*$)
    匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
    匹配网址URL的正则表达式:http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?

     

    展开全文
  • 正则表达式

    千次阅读 多人点赞 2019-08-26 16:21:48
    文章目录正则表达式简介正则表达式匹配规则re模块compile 函数Pattern 对象Match 对象范例常见格式分组位置分组分割批量替换正则案例: 正则表达式简介 为什么要学正则表达式? 实际上爬虫一共就四个主要步骤: ...

    正则表达式简介

    为什么要学正则表达式?
    实际上爬虫一共就四个主要步骤:

    1. 明确目标 (要知道你准备在哪个范围或者网站去搜索)
    2. 爬 (将所有的网站的内容全部爬下来)
    3. 取 (去掉对我们没用处的数据)
    4. 处理数据(按照我们想要的方式存储和使用)

    我们down下了的数据是全部的网页,这些数据 很庞大并且很混乱,大部分的东西使我们不关心的,因此我们需要将之按我们的需要过滤和匹配出来。那么对于文本的过滤或者规则的匹配,最强大的就是正则表达式,是Python爬虫世界里必不可少的神兵利器。

    什么是正则表达式?
    正则表达式,又称规则表达式,通常被用来检索、替换那些符合某个模式(规则)的文本。
    正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合, 组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

    在这里插入图片描述

    正则表达式匹配规则

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    对URL地址进行匹配是一个相当困难的任务,其复杂性取决于你想获得多么精确的匹配结果。
    最简单的情况下URL应该匹配的内容有:协议名(http|https),一个主机名,一个可选的端口
    号,一个文件路径。

    在这里插入图片描述
    在这里插入图片描述

    re模块

    正则表达式使用 对特殊字符进行转义,所以如果我们要使用原始字符串,只需加一个 r 前缀, e.g. r’chuanzhiboke\t.\tpython’

    re 模块一般使用步骤

    1. 使用 compile() 函数将正则表达式的字符串形式编译为一个 Pattern 对象

    2. 通过 Pattern 对象提供的一系列方法对文本进行匹配查找,获得匹配结果,一个 Match 对象。

    3. 最后使用 Match 对象提供的属性和方法获得信息,根据需要进行其他的操作

    compile 函数

    compile 函数用于编译正则表达式,生成一个 Pattern 对象,它的一般使用形式如下:
    在这里插入图片描述

    Pattern 对象

    正则表达式编译成 Pattern 对象, 可以利用 pattern 的一系列方法对文本进行匹配查找了。
    Pattern 对象的一些常用方法主要有:
    match 方法:从起始位置开始查找,一次匹配 
    search 方法:从任何位置开始查找,一次匹配 
    findall 方法:全部匹配,返回列表 
    finditer 方法:全部匹配,返回迭代器 
    split 方法:分割字符串,返回列表 
    sub 方法:替换
    

    match 方法

    match 方法用于查找字符串的头部(也可以指定起始位置),它是一次匹配,只要找到了一个匹配的结果就
    返回, 而不是查找所有匹配的结果。它的一般使用形式:mach(string[,pos[,endpos]])
    string 待匹配的字符串
    pos 字符串的起始位置, 默认值是 0
    endpos 字符串的终点位置, 默认值是 len (字符串长度)
    

    Match 对象

    group([group1, …]) 方法用于获得一个或多个分组匹配的字符串,当要获得整个匹配的子串时,可直接使用 group() 或 group(0); 
    
    start([group]) 方法用于获取分组匹配的子串在整个字符串中的起始位置(子串第一个字符的索引),参数默认 值为 0; 
    
    end([group]) 方法用于获取分组匹配的子串在整个字符串中的结束位置(子串最后一个字符的索引+1),参数 默认值为 0; 
    
    span([group]) 方法返回 (start(group), end(group))。
    

    search 方法
    search 方法用于查找字符串的任何位置,它也是一次匹配,只要找到了一个匹配的结果就返回,而不是查找所有 匹配的结果,它的一般使用形式如下:
    当匹配成功时,返回一个 Match 对象,如果没有匹配上,则返回 None。

    findall 方法与finditer 方法
    findall方法搜索整个字符串,获得所有匹配的结果。使用形式如下:
    findall(string[,pos[,endpos]])
    finditer方法的行为跟findall的行为类似,也是搜索整个字符串,获得所有匹配的结果。但它返回一个顺序访问每一个匹配结果(Match对象)的迭代器。
    split 方法
    split 方法按照能够匹配的子串将字符串分割后返回列表,它的使用形式如下:
    split(string[,maxsplit])
    maxsplit 指定最大分割次数,不指定将全部分割.

    sub方法
    sub 方法用于替换。它的使用形式如下:
    在这里插入图片描述

    repl 可以是字符串也可以是一个函数:
    1). 是字符串,使用 repl 去替换字符串每一个匹配的子串,并返回替换后的字符串,
    2). 如果 repl 是函数,这个方法应当只接受一个参数(Match 对象),并返回一个字符串用于替换.

    count 用于指定最多替换次数,不指定时全部替换。

    匹配中文
    在某些情况下,我们相匹配文本中的汉字,有一点需要注意的是,中文的unicode编码范围,主要在[u4e00-u9fa5],这里主要是因为这个范围不完整,比如没有包括全部中文标点,不过在大部分情况下,应该是够用的。

    贪婪模式与非贪婪模式:abbbc

    1. 贪婪模式:在整个表达式匹配成功的前提下,尽可能多的匹配 ( .* );
    	使用贪婪的数量词的正则表达式 ab* ,匹配结果: abbb。
    	* 决定了尽可能多匹配 b,所以a后面所有的 b 都出现了。
    2. 非贪婪模式:在整个表达式匹配成功的前提下,尽可能少的匹配 ( ? );
    	使用非贪婪的数量词的正则表达式 ab*? ,匹配结果: a。 .*? .+?
    	即使前面有 * ,但是 ? 决定了尽可能少匹配 b,所以没有 b。
    3. Python里数量词默认是贪婪的。
    

    范例

    常见格式

    # 导入正则表达式对应的模块;
    import re
    
    # 定义正则表达式的规则;
    pattern = r'westos'
    # 对正则表达式进行一个编译, 编译后, 匹配速度更快;
    patternObj = re.compile(pattern)
    # 将来要处理的字符串内容;
    text = "hello westos hello world westos"
    # 匹配符合正则规则的所有内容;
    result = patternObj.findall(text)
    print(result)
    

    运行结果:
    在这里插入图片描述

    # 案例1: 匹配所有的qq邮箱, username@qq.com, 其中username必须是字母数字或者下划线, 次数为2-12个之间;
    import re
    
    pattern1 = r'\s\w{2,12}@qq\.com'
    text = ' westos@qq.com  hello@qq.com  dhwehfhjrefhjrehfuhregiuhgggggggggggggiu@qq.com'
    patternObj = re.compile(pattern1)
    result = patternObj.findall(text)
    print(result)
    
    # 案例2:
    #     北美电话的常用格式:(eg: 2703877865)
    #             前3位: 第一位是区号以2~9开头 , 第2位是0~8, 第三位数字可任意;
    #             中间三位数字:第一位是交换机号, 以2~9开头, 后面两位任意
    #             最后四位数字: 数字不做限制;
    pattern2 = r'\(?[2-9][0-8]\d\)?[-\.\s]?[2-9]\d{2}[-\.\s]?\d{4}'
    text = '(323)4567890'
    patternObj = re.compile(pattern2)
    result = patternObj.findall(text)
    print(result)
    

    运行结果:
    在这里插入图片描述

    分组

    import re
    
    """
    http://www.baidu.com
    https://www.baidu.com
    ftp://www.baidu.com
    """
    # | 或者
    # ()分组, 如果有分组, 只返回分组里面匹配到的内容;
    # 匹配http和https协议的URL地址;
    # r:代表规则为原生字符串, 一般情况下\代表转义的意思, 如果匹配的规则里面包含\时, 要写成\\, 而有了r, 就不用\\了.
    URLpattern = r'((http|https)://(\w+\.\w+\.\w+))'
    # 匹配http和https协议的URL地址;
    # URLpattern = 'https?://\w+\.\w+\.\w+'
    patternObj = re.compile(URLpattern)
    text = 'http://www.baidu.com https://www.baidu.com ftp://www.baidu.com'
    result = patternObj.findall(text)
    print(result)
    

    运行结果:
    在这里插入图片描述

    位置分组

    import  re
    
    html = '<html><p>hello python</p></html>'
    # r:原生字符串, \代表转义, \\如果没有r时必须用\\代表\字符串;
    """
    <(.*)>: 第一个分组
    <(.*)>: 第2个分组
    (.*): 第3个分组
    </\2>: \2的位置必须和第二个分组的内容保持一致, 否则不匹配;
    </\1>: \1的位置必须和第1个分组的内容保持一致, 否则不匹配;
    """
    pattern = r'<(.*)><(.*)>(.*)</\2></\1>'
    patternObj = re.compile(pattern)
    result = patternObj.findall(html)
    print(result)
    

    运行结果:
    在这里插入图片描述

    分割

    import re
    # 需求: 拿出运算操作中所有的数字
    text = '1+3+5*10-8'
    patternObj = re.compile(r'\+|-|\*|/')
    # maxsplit=最大分割次数;
    result = patternObj.split(text, maxsplit=4)
    print(result)
    

    运行结果:
    在这里插入图片描述

    批量替换

    """
    sub 方法用于替换。它的使用形式如下:
    
    """
    import  re
    text = "本文章点赞数为100, 转发数为20"
    patternObj = re.compile(r'\d+')
    # 将text文本信息中符合patternObj规则的内容替换为0;
    result = patternObj.sub('0' , text)
    print(result)
    
    # 需求: 匹配到的所有数值+1
    
    def addNum(matchObj):
        """对匹配到的内容+1"""
        if matchObj:
            # 目前num时一个字符串
            num = matchObj.group()
            # 在原有基础上加1 , num时数值类型
            num = int(num) + 1
            return str(num)
    
    
    def add_perfix(matchObj):
        if matchObj:
            return '1002' + matchObj.group()
    
    result = patternObj.sub(addNum, text)
    print(result)
    
    result = patternObj.sub(add_perfix, text)
    print(result)
    

    运行结果:
    在这里插入图片描述

    正则案例:

    """
    西刺代理IP定向爬虫
        需求分析: 获取代理的IP和端口
    """
    import re
    
    import requests
    # User-Agent随机选择代理模块;
    from fake_useragent import  UserAgent
    # 线程池
    from concurrent.futures import  ThreadPoolExecutor
    
    
    def get_content(url):
        """数据采集"""
        try:
            headers = {
                'User-Agent': ua.random,
    
            }
            response = requests.get(url, headers=headers)
            response.raise_for_status()
            response.encoding = response.apparent_encoding
        except Exception as e:
            print("网页" + url + "爬取错误:", e)
            return  ''
        else:
            # response.text     : 如果普通的页面, 用text, 返回字符串的内容
            # response.content  : 如果不是普通的页面(图片, 视频), 用content, 返回的时二进制内容;
            return  response.text
    
    def html_parser(html):
        """数据解析: IP:PORT"""
        """
        <tr class="odd">
          <td class="country"><img src="//fs.xicidaili.com/images/flag/cn.png" alt="Cn"></td>
          <td>113.89.53.247</td>
          <td>9999</td>
        </tr>
        """
        # 1. 获取每一行代理IP的详细内容;
        # re.S: 表示“.”(不包含外侧双引号,下同)的作用扩展到整个字符串,包括“\n”。
        # .代表除了\n之外的任意单个字符;
        tr_pattern = re.compile(r'<tr class=.*?>(.*?)</tr>', re.S)
        trs = tr_pattern.findall(html)
        # 2. 获取这一行IP代理的ip和port;
        """
         <td class="country"><img src="//fs.xicidaili.com/images/flag/cn.png" alt="Cn"></td>
          <td>113.89.53.247</td>
          <td>9999</td>
        """
        IPpattern = re.compile(r'<td>(\d+\.\d+\.\d+\.\d+)</td>')  # \.代表时真实的点字符串, 进行转义, 否则代表任意单个字符;
        PortPattern = re.compile(r'<td>(\d+)</td>')
        for tr in trs:
            ip = IPpattern.findall(tr)[0]
            port = PortPattern.findall(tr)[0]
            yield  ip, port
    
    
    
    def task(page):
        """
        多线程执行的任务: 数据采集和数据分析, 返回ip和port
        :return:
        """
        print("正在爬取第%d页" %(page))
        url = 'https://www.xicidaili.com/nt/%s' % (page)
        html = get_content(url)
        results = html_parser(html)
        return  results
    
    
    
    if __name__ == '__main__':
        pages = 5
        threadCount = 10
        filename = 'xici.csv'
        # 创建用户代理的对象, 通过random属性随机获取一个User-Agent, 用于反爬虫处理;
        ua = UserAgent()
    
        with ThreadPoolExecutor(threadCount) as pool:
            taskResults = pool.map(task, range(1, pages+1))
    
        fw = open(filename, 'w')
        count = 0
        for taskResult in taskResults:
            for item in taskResult:
                count += 1
                fw.write(",".join(item) + '\n')
                # item: ('121.13.252.61', '41564')
                # print(item)
        print(count)
        fw.close()
    

    运行结果:
    在这里插入图片描述
    保存到xici.csv里
    在这里插入图片描述

    展开全文
  • 带你学会使用正则表达式

    千人学习 2020-06-24 23:51:42
    本门课程主要讲解正则表达式的引用场景和一些基础用法,让大家对正则表达式有一个清晰地认识。 为什么需要掌握正则表达式正则表达式非常灵活、而且功能非常强大,它可以迅速地用极简单的...
  • js/javascript正则表达式中/g&nbsp…

    千次阅读 2013-12-30 20:34:02
    正则的思想都是一样的,但是具体的写法会有所不同,在这里提到的/g,/i,/m在其他的地方也许就不能用了。...表示该表达式将用来在输入字符串中查找所有可能的匹配,返回的结果可以是多个。如果不加/g最多只会匹
    http://aabc99.blog.163.com/blog/static/163010810201132185918581/

    正则的思想都是一样的,但是具体的写法会有所不同,在这里提到的/g,/i,/m在其他的地方也许就不能用了。

    一,js正则标志/g,/i,/m说明

    1,/g 表示该表达式将用来在输入字符串中查找所有可能的匹配,返回的结果可以是多个。如果不加/g最多只会匹配一个

    2,/i  表示匹配的时候不区分大小写

    3,/m 表示多行匹配,什么是多行匹配呢?就是匹配换行符两端的潜在匹配。影响正则中的^$符号


    二,实例说明

    1,/g的用法

    <script type="text/javascript">   
    str = "tankZHang (231144)"+   
    "tank ying (155445)";   
    res = str.match(/tank/);    //没有加/g   
    alert(res);                 //显示一个tank   
      
    res = str.match(/tank/g);   //加了/g   
    alert(res);                 //显示为tank,tank   
    <STRONG></script></STRONG>  


    2,/i的用法


    <script type="text/javascript">   
    str = "tankZHang (231144)"+  "tank ying (155445)"; 
      
    res = str.match(/zhang/);       
    alert(res);                  //显示为null   
      
    res = str.match(/zhang/i);   //加了/i   
    alert(res);                  //显示为ZHang   
    </script>  


    3,/m的用法


    <script type="text/javascript">   
    var p = /$/mg;   
    var s = '1\n2\n3\n4\n5\n6';   
    alert(p.test(s));  //显示为true   
    alert(RegExp.rightContext.replace(/\x0A/g, '\\a'));  //显示\a2\a3\a4\a5\a6   
    alert(RegExp.leftContext);    //显示为竖的2345   
    alert(RegExp.rightContext);   //显示为6   
      
    var p = /$/g;   
    var s = '1\n2\n3\n4\n5\n6';   
    alert(p.test(s));  //显示为true   
    alert(RegExp.rightContext.replace(/\x0A/g, '\\a'));  //什么都不显示   
    alert(RegExp.leftContext);    //显示为竖的123456   
    alert(RegExp.rightContext);   //什么都不显示   
      
    var p = /^/mg;   
    var s = '1\n2\n3\n4\n5\n6';   
    alert(p.test(s));    //显示为true   
    alert(RegExp.rightContext.replace(/\x0A/g, '\\a')); //显示为1\a2\a3\a4\a5\a6   
    alert(RegExp.leftContext);     //显示为竖的12345   
    alert(RegExp.rightContext);    //显示为6   
    </script>    
      
    //从上例中可以看出/m影响的^$的分割方式 

    上面说的三个例子,/i,/g,/m分开来说的,可以排列组合使用的。个人觉得/m没有多大用处
    展开全文
  • sql语言 结构化的查询语言。(Structured Query Language),是关系数据库管理系统的标准语言。 它是一种解释语言:写一句执行一句,不需要整体编译执行。 语法特点: 1.没有“ ”,字符串使用‘ ’包含 ...

    http://blog.csdn.net/pipisorry/article/details/46773545

    sql语言
    结构化的查询语言。(Structured Query Language),是关系数据库管理系统的标准语言。
    它是一种解释语言:写一句执行一句,不需要整体编译执行。
    语法特点:
    1.没有“ ”,字符串使用‘ ’包含
    2.没有逻辑相等,赋值和逻辑相等都是=
    3.类型不再是最严格的。任何数据都可以包含在‘ ’以内
    4.没有bool值的概念,但是在视图中可以输入true/false
    5.它也有关系运算符:> < >= <= = <> != ,它返回一个bool值
    6.它也有逻辑运算符: !(not) &&(and) ||(or)
    7.它不区别大小写

    皮皮Blog

     

     

    Mysql常用显示命令

    1、显示当前数据库服务器中的数据库列表:

    mysql> SHOW DATABASES;

    注意:mysql库里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。

    2、进入数据库

    mysql> USE 库名;

    2、显示数据库中的数据表

    mysql> SHOW TABLES;

    3、显示数据表的结构

    mysql> DESCRIBE 表名;

    4、建立数据库

    mysql> CREATE DATABASE 库名;

    5、建立数据表:

    mysql> USE 库名;
    mysql> CREATE TABLE 表名 (字段名 VARCHAR(20), 字段名 CHAR(1));

    6、删除数据库

    mysql> DROP DATABASE 库名;

    7、删除多个数据表

    mysql> DROP TABLE 表名,表名;

    8、将表中记录清空:

    mysql> DELETE FROM 表名;

    删除表中某些记录:

    delete from 表名 where 字段=**;

    delete from django_migrations where id>=6 and id<=17;

    9、显示表中的记录

    mysql> SELECT * FROM 表名;

    select * from 表名 limit 5 ; // 取出前五条记录
    select * from 表名 limit 0 ,5; //取出前五条记录
    select * from 表名 limit 3,10;//取出3后面的10条记录,不包括3
    select*from 表名 order by rand() limit 2;// 从表中随机取出2 条记录,这里2 可以自己改

    [Mysql查询数据库表中前几条记录]

    10、往表中插入新的字段

    mysql> alter tabel 表名 add column 字段名 varchar(10);

    10、往表中插入记录

    mysql> INSERT INTO 表名 VALUES (”hyq”,”M”);

    语法:INSERT [INTO] tbl_name [(col_name,...)] VALUES (PRession,...),…
          INSERT [INTO] tbl_name SET col_name=expression, ...

    Note:在django中插入时要多加一个id字段:INSERT INTO 表名 VALUES (1, 'aaa', 'bbb');

    11、修改字段类型:

    mysql> alter table 表名 modify column 字段名 varchar(12);

    11、更新表中数据:

    mysql-> UPDATE 表名 SET 字段名1='a',字段名2='b' WHERE 字段名3='c';

    12、用文本方式将数据装入数据表中:

    mysql> LOAD DATA LOCAL INFILE “D:/mysql.txt” INTO TABLE 表名;

    13、导入.sql文件命令:

    mysql> USE 数据库名;
    mysql> SOURCE d:/mysql.sql;

    14、命令行修改root密码:

    mysql> UPDATE mysql.user SET password=PASSWORD('新密码') WHERE User='root';
    mysql> FLUSH PRIVILEGES;

    15、显示use的数据库名:

    mysql> SELECT DATABASE();

    16、显示当前的user:

    mysql> SELECT USER();

    Note:

    1. 操作都是在MySQL的提示符下进行的,而且每个命令以分号结束。

    2. sql语句对大小写不敏感

    [MySQL命令详解]

    皮皮Blog

     

     

    常用SQL语句(Mysql)

    1.库

    1)创建数据库:create Database database_name; 

          database_name:(1)首字母不能是数字、$、空格、特殊字符、保留字

                       (2)最大128字节

                       (3)由字母、数字、下划线、@和$组成

    2)查看数据库:show databases;

    3)选择数据库:use database_name ;

    4)删除数据库:drop database  database_name;

    2.存储引擎

    1)查看所支持存储引擎:(1)show engines  (2)show variables like 'have%';

    2)查看默认的存储引擎:show variables like'storage_engine%';

    3.表

    1)创建表:create table table_name (属性名 数据类型…)

    2)查看表结构:

    (1)表定义信息:describe table_name       desctable_name 

    (2)表详细定义:show create table table_name 

    3)删除表:drop table table_name 

    4)修改表(alter table):

    (1)修改表名:alter table  老表名 rename新表名

    (2)增加字段:(最后)alter table  表名 add 属性名 属性类型

             (第一位置)alter table  表名 add 属性名 属性类型 first

          (指定字段后)alter  table  表名 add 属性名属性类型 after 属性名

    (3)删除字段:alter table  表名 drop属性名 

    (4)修改字段:

    (修改数据类型)alter table  表名 modify 属性名 属性类型

       (修改字段名)alter table 表名change 旧属性名 新属性名 旧类型

    (同时修改)alter table 表名change 旧属性名新属性名 新类型

    (修改字段顺序)alter table 表名modify 属性名1数据类型 FIRSE|AFTER 属性名2

    4.数据操作

    1)插入数据

    (1)INSERT INTO table_name (field1….field n) VALUES(value1…valuen)

    (2) INSERT INTO table_name (field1….fieldn) 

    VALUES(value1…valuen)…(value11…value mn)

    (3)插入查询结果:INSERT INTO table_name1 (field11….field 1n) SELECT (field21….field 2n) FROM table_name2 WHERE…

    2)更新数据:UPDATE table_name SETfield1=value1…fieldn=value n WHERE CONDITION

    3)删除记录:DELETE FROM  table_name WHERE CONDITION

    5.单表数据查询

    1)SELECT field1,field n FROMtable_name

    2)避免重复查询:SELECT DISTINCT field1,field n FROM table_name

    3)四则运算:用AS定义别名,或省略AS关键字

    4)显示格式查询:SELECT CONCAT(field格式) 【AS 别名】FROM table_name

    5)条件数据查询:SELECT field1,field nFROM table_name WHERE CONDITION

           _通配符:匹配单一字符   %通配符:任意长度字符

    6)排序查询:SELECT field1,field n FROMtable_name WHERE CONDITION ORDER  BY filedldm1 [ASC|DESC] [,filedldm1 [ASC|DESC],]

    7)限制数据记录查询数量:SELECT field1,fieldn FROM table_name WHERE CONDITION LIMIT OFFSET_START,ROW_COUNT

    8)统计函数和分组数据记录查询:COUNT()函数、AVG()函数、SUM()函数、MAX()函数、MIN()函数

    9)分组数据查询:SELECT function() FROMtable_name WHERE CONDITION GROUP BY field

    10)实现统计功能的分组数据查询:SELECT GROUP_CONCAT(field)  FROMtable_name 

    WHERE CONDITION GROUP BYfield

    11)多字段分组查询:SELECT GROUP_CONCAT(field), function(field) FROM table_name  WHERE CONDITIONGROUP BY field1,field2……fieldn

    12)HAVING子句限定分组查询:SELECT function(field)  FROM table_name WHERE CONDITION GROUP BY field1,field2……fieldnHAVING CONTITION

    6.多表数据查询: 

    1)FROM子句利用(,)区分多个表,在WHERE子句中通过逻辑表达式来实现匹配条件

    2)FROM子句用 ”JOIN ON”,ON后接条件

    7.操作表的约束

    1)设置非空约束(NOT NULL,NK):createtable table_name (属性名 类型 NOT NULL );

    2)设置字段默认值(DEFAULT):create tabletable_name (属性名 类型 DEFAULT 默认值);

    3)设置唯一约束(UNIQUE,UK):create tabletable_name (属性名 类型 UNIQUE L );

    4)设置主键约束(PRIMARY KEY,PK):

    单字段主键:create table table_name(属性名 类型 PRIMARY KEY );

    多字段主键:create table table_name(属性名 类型 ,…【CONSTRAINT 约束名】 PRIMARY KEY(属性名,属性名…) );

    5)设置字段值自动增加(AUTO_INCREMENT):

    create table table_name (属性名 类型AUTO_INCREMENT,… );

    6)设置外键约束(FOREIGNKEY,FK):

    create table table_name (属性名 类型;属性名 类型;…

    CONSTRAINT 外键约束名 FOREIGN(属性名1)

    REFERENCES 表名(属性名2));

    8.索引

    1)创建普通索引

    (1) CREATE TABLE table_name (

    属性名 数据类型,属性名 数据类型,……属性名 数据类型,

    INDEX | KEY【索引名】(属性名1【(长度)】【ASC|DESC】));

            注:INDEX 或KEY参数用来指定字段为索引

               不同存储引擎定义了表的最大索引数和最大索引长度

               Mysql所支持的存储引擎对每个表至少支持16个索引,总索引长度至少256

    (2) CREATE INDEX 索引名

    ON 表名(属性名1【(长度)】【ASC|DESC】));

    (3)ALTER TABLE table_name 

    ADD INDEX | KEY索引名(属性名1【(长度)】【ASC|DESC】)

    2)创建唯一索引

    (1) CREATE TABLE table_name (

    属性名 数据类型,属性名 数据类型,……属性名 数据类型,

    UNIQUE INDEX | KEY【索引名】(属性名1【(长度)】【ASC|DESC】));

    (2) CREATE UNIQUE INDEX 索引名

    ON 表名(属性名1【(长度)】【ASC|DESC】));

    (3) ALTER TABLE table_name 

    ADD UNIQUE INDEX | KEY索引名(属性名1【(长度)】【ASC|DESC】)

    3)创建全文索引、

    (1) CREATE TABLE table_name (

    属性名 数据类型,属性名 数据类型,……属性名 数据类型,

    FULLTEXT INDEX | KEY【索引名】(属性名1【(长度)】【ASC|DESC】));

    (2) CREATE FULLTEXT INDEX 索引名

    ON 表名(属性名1【(长度)】【ASC|DESC】));

    (3) ALTER TABLE table_name 

    ADD FULLTEXT INDEX | KEY索引名(属性名1【(长度)】【ASC|DESC】)

    4)创建多列查询

          (1) CREATETABLE table_name (

    属性名 数据类型,属性名 数据类型,……属性名 数据类型,

    INDEX | KEY【索引名】(属性名1【(长度)】【ASC|DESC】)

                      …….属性名n【(长度)】【ASC|DESC】));

    (2) CREATE INDEX 索引名

    ON 表名(属性名1【(长度)】【ASC|DESC】)

            …….

    属性名n【(长度)】【ASC|DESC】));

    (3)ALTER TABLE table_name 

    ADD INDEX | KEY索引名(属性名1【(长度)】【ASC|DESC】)

                       …….

    属性名n【(长度)】【ASC|DESC】));

    5)查询索引:EXPLAIN

    6)删除索引:DROP INDEX  index_name ONtable_name

    9.视图

    1)创建视图reate view view_name AS查询语句

    2)查看视图:

      (1)名称:USE 库; SHOW TABLES;不仅会显示表名,还会显示视图名

      (2)详细信息:SHOW TABLE  STATUS 【FROM库】【LIKE ‘关键字’】

      (3)设计信息:DESCRIBE|DESC view_name

      (4)系统数据库information_schema中视图信息的表格views

    3)删除视图:DROP VIEW view_name1,view_name1……

    4)修改视图:

      (1)替换的创建:create OR REPLACE view view_name AS查询语句

      (2)修改语句:ALTER VIEW view_name AS 查询语句

    10.触发器

    1)创建有一条语句的触发器

         Create trigger  trigger_name

          BEFORE|AFTER  trigger_EVENT

            ON  table_name FOR EACH ROW  trigger_STMT

    trigger_EVENT:触发事件,即触发执行的条件(DELETE、INSERT、UPDATE)

    FOR EACHROW:任何一条记录上的操作满足触发事件都会触发该触发器

    trigger_STMT:激活触发器后执行语句

    2)创建包含多条执行语句的触发器

           Create trigger  trigger_name

             BEFORE|AFTER trigger_EVENT

                ON table_name  FOR EACHROW 

     BEGIN 

     trigger_STMT 

     END

    3)查看触发器:show triggers

    4)删除:drop triggertrigger_name

    11.存储过程

    CREATE PROCEDUREprocedure_name([procedure_parameter[,…]])

         [characteristic…] routine_body

    注释:(1)procedure_parameter:存储过程的参数

              [IN|OUT|INOUT] procedure_nametype

    (2)characteristic:存储过程的特性

    (3)routine_body:SQL语句主体,可用BEGIN…END开始和结束

    12.函数

          CREATE FUNCTIONfunction_name([function_parameter[,…]])

              [characteristic…] routine_body

     function_parameter中每个参数的语法格式:parameter_name type

    13.DOS连接mysql:mysql –hhostname|hostIP –p port –u username –p DatabaseName –e “sql”

         直接输入密码:在-p后直接输入密码不用加空格

    14.mysql创建普通用户账户

      1)CREATE USER username [IDENTIFIED BY [PASSWORD]‘password’]…

              关键字PASSWORD实现对密码加密

    2)INSERT INTOuser(host,user,password) VALUES(‘hostname’,’user’, PASSWORD(‘password’));

    (1)由于该语句是向mysql_user插入用户账号数据,ssl_cipher、x509_issuer、x509_subject无默认值,所以还需要设置这些字段。

    (2)对于Password字段的值一定要用PASSWORD()函数加密

    第二步,执行FLUSH PRIVILEGES使账号生效

    3)GRANT创建账户可以对账户赋权限

                GRANTpriv_type ON databasename.tablename

                    TO username[IDENTIFIED BY [PASSWORD] ‘password’]…

      databasename.tablename:表示该用户只能对该表的权限

    15.修改root密码:

    (1)mysqladmin –u username –ppassword “new_password”

       (2)进入root用户,再SETPASSWORD=PASSWORD(“new_password”)

    (3)更新mysql.user数据修改

         UPDATE user SET password=PASSWORD(“new_password”)

           WHERE user=”root” AND host=”hostname”;

    [常用SQL语句(Mysql)]

    皮皮Blog

     

     

     

     

    MySQL索引使用规则

    1. 用于索引的最好的备选数据列是那些出现在WHERE子句、join子句、ORDER BY或GROUP BY子句中的列。

    2. 什么情况下应不建或少建索引?
      a. 表记录太少
      b. 经常插入、删除、修改的表
      c. 经常和主字段一块查询但主字段索引值比较多的表字段

    3. 复合索引的创建:
      比如有一条语句是这样的:

      select * from users where area=’beijing’ and age=22;
      如果我们是在area和age上分别创建单个索引的话,由于mysql查询每次只能使用一个索引,所以虽然这样已经相对不做索引时全表扫描提高了很多效率,但是如果在area、age两列上创建复合索引的话将带来更高的效率。

      如果我们创建了(area, age,salary)的复合索引,那么其实相当于创建了(area,age,salary)、(area,age)、(area)三个索引,这被称为最佳左前缀

    4. 复合索引的建立以及最左前缀原则:
      如果你需要索引一个字符串数据列,那么最好在任何适当的情况下都应该指定前缀长度。你可以索引CHAR、VARCHAR、BINARY、VARBINARY、BLOB和TEXT数据列的前缀。
      假设你在表的state、city和zip数据列上建立了复合索引。索引中的数据行按照state/city/zip次序排列,因此它们也会自动地按照state/city/zip次序排列。这意味着,即使你在查询中只指定了state值,或者指定state和city值,MySQL也可以使用这个索引。因此,这个索引可以被用于搜索如下所示的数据列组合:(state, city, zip)(state, city)(state)

    5. 索引不会包含有NULL值的列
      只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。

    6. mysql查询只使用一个索引.

      因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。

    7. 一般情况下不鼓励使用like操作.

      如果非使用不可,如何使用也是一个问题。like “%a%” 不会使用索引而like “aaa%”可以使用索引。

    8. 不要在列上进行运算,select * from users where YEAR(adddate)

    9. 不使用NOT IN操作:
      NOT IN操作不会使用索引将进行全表扫描。NOT IN可以用NOT EXISTS代替.

    [mysql索引箴言集]

    [史上最全的MSSQL复习笔记]

    皮皮Blog

     

     

     

    mysql特殊符号

    % (百分号)  :
    代表任意长度(长度可以为0)的字符串

    例:a%b表示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab等都满足该匹配串

    _ (下横线):
    代表任意单个字符

    例:a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb等都满足该匹配串

    字符串引号:

    在SQL中,表示字符串引号强烈建议使用单引号(')。虽然MySQL(和PHP搭配之最佳组合)也可以使用双引号("),但是为了和sql server(WINDOWS平台上强大的数据库平台)和Oracle(大型网站数据库平台)统一,建议都使用单引号。如果在字符串中也有单引号出现的话,在SQL中需要将其替换为两个单引号(''),DBMS会将其解释为一个单引号的。

    SQL的换行符和字符串连接符:

    在MySQL(和PHP搭配之最佳组合)、sql server(WINDOWS平台上强大的数据库平台)和Oracle(大型网站数据库平台)中均有不同,下面以列表显示。  MySQL(和PHP搭配之最佳组合)sql server(WINDOWS平台上强大的数据库平台)Oracle(大型网站数据库平台)换行符\n或\r\n或CHAR(10)CHAR(13)CHR(10)字符串连接符CONCAT()+||或CONCAT()

    宏变量标识符(&) :

    在Oracle(大型网站数据库平台)里有特殊含义,是一个宏变量标识符,在SQLPLUS里执行SELECT 'AAA BBB' AS STR FROM DUAL,它会提示你输入宏变量值,所有如果SQL里有(&),建议用单引号括起来,如SELECT 'AAA'||'&'||'nbsp;BBB' AS STR FROM DUAL它就不会提示了。

     

    mysql正则表达式

    replace、regexp的用法
    0 Comments | This entry was posted on Apr 08 2010
    mysql replace用法
    1.replace into
    replace into table (id,name) values('1′,'aa'),('2′,'bb')
    此语句的作用是向表table中插入两条记录。如果主键id为1或2不存在
    就相当于
    insert into table (id,name) values('1′,'aa'),('2′,'bb')
    如果存在相同的值则不会插入数据
    2.replace(object,search,replace)
    把object中出现search的全部替换为replace
    select replace('www.163.com','w','Ww')—>WwWwWw.163.com
    例:把表table中的name字段中的aa替换为bb
    update table set name=replace(name,'aa','bb')

    扩展正则表达式
    由MySQL提供的模式匹配的其它类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它们是同义词)。
    扩展正则表达式的一些字符是:
    · ‘.'匹配任何单个的字符。
    · 字符类“[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。为了命名字符的范围,使用一个“-”。“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字。
    · “ * ”匹配零个或多个在它前面的字符。例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配任何数量的数字,而“.*”匹配任何数量的任何字符。
    如果REGEXP模式与被测试值的任何地方匹配,模式就匹配(这不同于LIKE模式匹配,只有与整个值匹配,模式才匹配)。
    为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”或在模式的结尾用“$”。
    为了说明扩展正则表达式如何工作,下面使用REGEXP重写上面所示的LIKE查询:
    为了找出以“b”开头的名字,使用“^”匹配名字的开始:
    mysql> SELECT * FROM pet WHERE name REGEXP ‘^b';

    [mysql 正则表达式]

    [删除mysql数据库中所有不以JP开头的表]

    from:http://blog.csdn.net/pipisorry/article/details/46773545

     

    展开全文
  • 正则表达式 @符号和#号--->@ 和# 

    千次阅读 2016-10-13 19:41:51
    项目中需要用到在TextView里面显示:@名字 、#网址链接 ...以下是正则表达式 AT@: String regex = "#[\\w\\p{InCJKUnifiedIdeographs}-]{1,26}";// #网址链接: String AT= "@[\\w\\p{InCJKUnifiedIdeograph
  • String.matches()的用法 2007-07-16 20:30 String.matches() 这个方法主要是返回是否匹配指定的字符串,如果匹配则为true,否则为false; 如:/**    * 判断字符创是否是一个有效的日期 ...
  • 最全常用正则表达式大全

    万次阅读 多人点赞 2020-04-13 20:11:11
    一、校验数字的表达式 1. 数字:^[0-9]*$ 2. n位的数字:^\d{n}$ 3. 至少n位的数字:^\d{n,}$ 4. m-n位的数字:^\d{m,n}$ 5. 零和非零开头的数字:^(0|[1-9][0-9]*)$ 6. 非零开头的最多带两位小数的数字:^...
  • 正则表达式|

    千次阅读 2018-08-07 13:48:08
    精通正则表达式&gt;&gt; 一书。 发现了很多自己不了解的东西(汗颜阿,自己知道的东西太少了!)。其中"|"就是其中一个。不懂就补吧,所以就有了下面的一点记录。 2. 用途 “| ” 他的意思...
  • 正则表达式的与或非

    万次阅读 2020-01-21 11:52:19
    正则表达式的与或非 参考地址:正则表达式的与或非
  • 推荐一个好用的正则表达式在线生成工具 本工具提供了常用正则表达式的在线生成功能,可实现诸如字符、网址、邮编、日期、中文等的正则表达式生成功能,并且提供各类常见语言如:javascript、php、Go语言、java、...
  • 正则表达式 匹配日期和时间

    万次阅读 2018-09-10 14:17:14
    1、正则表达式匹配字符串,注意位数
  • 正则表达式如何匹配括号

    万次阅读 2018-10-24 14:25:14
    在用正则表达式匹配小括号()时,应将括号用[]包起来,如下: regexs = "{\"regexs\":[\"showPlayer[(]'(.*?)'\"]}"; videoUrl = DownloadUtil.getParseResult(filed.toString(), ...
  • 如何用正则表达式匹配汉字

    万次阅读 2018-09-20 17:27:34
    [\u4E00-\u9FA5\\s]+ 多个汉字,包括空格 [\u4E00-\u9FA5]+ 多个汉字,不包括空格 [\u4E00-\u9FA5] 一个汉字
  • 正则表达式匹配负数和数字

    万次阅读 2017-08-21 17:49:18
    ^[\-|0-9][0-9]*   ^[\-|0-9][0-9]{1,}$ input type='number' 也行。。。
  • 正则表达式匹配关键词

    千次阅读 2017-11-30 20:54:10
    关键词。
  • 正则表达式只能输入数字

    万次阅读 2019-08-06 17:54:03
    ^[0-9]*$
  • 正则表达式匹配一行开头

    万次阅读 2018-03-07 09:29:27
    行头就是开头的内容(?:^|\n)行头.* 写博客
  • 使用正则表达式进行替换 回车、换行、空白符号: String str=array.get(i).replaceAll("\r|\n|\\s", ""); \r: 匹配一个回车符 \n:换行符匹配; \\s:匹配任何空白字符,包括空格、制表符、换页符等; 例如:大家好...
1 2 3 4 5 ... 20
收藏数 552,828
精华内容 221,131
关键字:

正则表达式