正则表达式匹配指定数据和字母

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式匹配指定数据和字母相关的知识,希望对你有一定的参考价值。

正则表达式匹配大写字母的表达为/^[a-z]+$/
其他情况下的匹配表达式:
一.测试字符串
var str = 'adobe indesign、microsoft word 等对中文与西文(这里用「西文」来泛指用空格分词的外文)混合排版支持较好的软件,都默认增大汉字和西文的间距。indesign 的默认设置是 1/4 的全角空格宽度(遵从 jis),也就是约等于一个半角空格。
匹配单个字母/数字
var reg = /[0-9a-z]/;
console.log(str.match(reg)); // 结果:["d"]
二、由一可以看出并没有匹配到大写字母
var reg = /[0-9a-z]/i;
console.log(str.match(reg)); // 结果:["a"]
3.前面都是匹配单一字符,那么要匹配所有字母和数字呢?
var reg = /[0-9a-z]/gi;
console.log(str.match(reg)); // 结果:["a", "d", "o", "b", "e", "i", "n", "d", "e", "s", "i", "g", "n", "m", "i", "c", "r", "o", "s", "o", "f", "t", "w", "o", "r", "d", "i", "n", "d", "e", "s", "i", "g", "n", "1", "4", "j", "i", "s"]
4.如果不要单个字符,要完整单词匹配或字母数字组合呢?
var reg = /[0-9a-z]+/gi;
console.log(str.match(reg)); // 结果:["adobe", "indesign", "microsoft", "word", "indesign", "1", "4", "jis"]
参考技术A 你这是中文引号,所以应该为。
[^"“-]+-\d+-0\.tmp\.[^.]+

[^"“-]+-\d+-1\.tmp\.[^.]+
手机上看不出来什么引号
-\d+\.tmp
全部匹配就是
[^"-]+-\d+-1\.tmp\.log
你把.tmp前1改成你想要的数字就可以了如
[^"-]+-\d+-2\.tmp\.log
参考技术B 正则:
.*-0\.tmp\.log匹配以"-0.tmp.log"结尾的文件。
把0该为1,2,3,4即可,如:
.*-1\.tmp\.log

正则表达式

一:基本正则表达式

正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

1、字符匹配

  • .:任意字符
  • []:匹配指定范围内的单个字符
  • [^]:匹配指定范围外的单个字符
  • [:alnum:] 字母和数字
  • [:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
  • [:lower:] 小写字母 [:upper:] 大写字母
  • [:blank:] 空白字符(空格和制表符)
  • [:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
  • [:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
  • [:digit:] 十进制数字 [:xdigit:]十六进制数字
  • [:graph:] 可打印的非空白字符
  • [:print:] 可打印字符
  • [:punct:] 标点符号

2、匹配次数

用在要指定次数的字符后面,用于指定前面的字符要出现的次数

  • *:匹配前边的字符任意次
  • .*:匹配任意字符任意次,表示所有
  • \?:匹配前边字符0或一次,表示前边字符可有可无
  • \{m\}:匹配前边字符m次
  • \{m,n\}:匹配前边字符最少m次,最多n次
    • \{,n\}:匹配前边字符至多n次
    • \{m,\}:匹配前边字符至少m次

3、位置锚定

  • ^:行首锚定,用于模式的最左侧
  • $:行尾锚定,用于模式的最右侧
  • ^PATTERN$:用于模式匹配整行
    • ^$:匹配空行
    • ^[[:space:]]*$:匹配空白行
  • \<或\b:单词锚定,用于单词模式的左侧
  • \>或\b:单词锚定,用于单词模式的右侧
  • \<PATTERN\>:匹配整个单词
  • \(\) 分组:将多个字符捆绑一起当做一个字符用
    • \|:或
    • \1:从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
    • \2:从左侧起,第二个左括号以及与之匹配右括号之间的模式所匹配到的字符
      • 后向引用:引用前面的分组括号中的模式匹配字符,(而非模式本身)
      • Note:分组括号中的模式匹配到的内容会被正则表达式引擎记录与内部的变量中,这些变量的命名方式为\1,\2,\3...
    \(ab\+\(xy\)*\)

      \1:ab\+\(xy\)*

      \2:xy

二:扩展的正则表达式

 

正则表达式与扩展正则表达式类似,只是扩展正则表达式表达更加简单。

正则表达式需要打 \ 转义字符 来表示某些字符的意思,而扩展正则表达式则不需要:

  • \{m} 正则表达式表示至少表示前面的字符m次    {m}             egrep一样
  • \? 正则表达式表示前面的字符0或1次                  ?           egrep一样
  • \+ 正则表达式表示前面的字符至少一次               +                egrep一样
  • \(\) 正则表达式表示分组                                       ()                egrep一样
  • \| 正则表达式表示或                                              |                egrep一样

三:练习一

1、显示/proc/meminfo文件中以大小s开头的行(要求:使用两种方法)
    # cat /proc/meminfo |grep -i "^s"
    # cat /proc/meminfo |grep "^\(s\|S\)"
2、显示/etc/passwd文件中不以/bin/bash结尾的行
    # grep -v "/bin/bash$" /etc/passwd
3、显示用户rpc默认的shell程序
    # getent passwd rpc |grep -o "/[s]\?bin/.*"
4、找出/etc/passwd中的两位或三位数
    # getent passwd |grep -o "\b[[:digit:]]\{2,3\}\b"
5、显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面有非空白字符的行
    # cat /etc/grub2.cfg |grep "^[[:space:]]\+" |grep -v "^[[:space:]]*$"
6、找出“netstat -tan”命令结果中以LISTEN后跟任意多个空白字符结尾的行
    # netstat -tan |grep "ESTABLISHED"
7、显示CentOS7上所有系统用户的用户名和UID
    # getent passwd |cut -d: -f1,3
8、添加用户bash、testbash、basher、sh、nologin(其shell为/sbin/nologin),找出/etc/passwd用户名和shell同名的行
    # getent passwd |grep "^\(\<[[:alnum:]]*\).*/\1$"
9、利用df和grep,取出磁盘各分区利用率,并从大到小排序
    df |grep "sd[a-z]" |grep -o "[0-9]\{1,3\}%" |grep -o [[:digit:]]*

四:练习二

1、显示三个用户root、mage、wang的UID和默认shell
    # getent passwd |grep -e "^root" -e "^mage" -e "^wang" | cut -d: -f1,3,7
2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行
    # cat /etc/rc.d/init.d/functions |grep "^\b[[:alpha:]]*()"
3、使用egrep取出/etc/rc.d/init.d/functions中其基名
    # echo /etc/rc.d/init.d/functions |grep -o "[[:alnum:]]\+$"
4、使用egrep取出上面路径的目录名
    # echo /etc/rc.d/init.d/functions |grep -o "^/.*/"
5、统计last命令中以root登录的每个主机IP地址登录次数
    # last |grep "^root" |grep -Eo "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])" |sort |uniq -c
6、利用扩展正则表达式分别表示0-910-99100-199200-249250-255
    [0-9] [1-9][0-9] 1[0-9][0-9] 2[0-4][0-9] 25[0-5]
7、显示ifconfig命令结果中所有IPv4地址
    # ifconfig |grep "inet[^[:digit:]]"|grep -Eo "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"
8、将此字符串:welcome to linux world中的每个字符去重并排序,重复次数多的排到前面
    # echo "welcome to linux world" |grep --color=auto -o "[[:alpha:]]" |sort |uniq -c |sort -nr

 

以上是关于正则表达式匹配指定数据和字母的主要内容,如果未能解决你的问题,请参考以下文章

java 正则表达式 表示字符串首字母

正则表达式和Shell脚本。

Java 正则表达式 限定字符串中只能包含字母,数字和连接符- 怎么写?

如何使用正则表达式,将字符串中的每个单词首字母大写

正则表达式如何匹配汉字?

正则表达式