首页 > 其他分享 >正则表达式

正则表达式

时间:2024-04-17 22:34:54浏览次数:31  
标签:var1 var3 var2 正则表达式 regexp 字符串 匹配

1. regexp 命令 

regexp 匹配正则表达式与字符串,它的语法为: 

  • regexp ?switches ? exp string ?matchvar? ?subMatchVar ... subMatchVar? 

regexp 命令比较字符串 string 是否与正则表达式 exp 部分或者全部匹配,并可以将字符串中的子字符串提取出来。如果字符串的某个子字符串和正则表达式匹配,则返回1,否则返回 0。

如果在 string 变量后面,还有其它的变量(称之为匹配变量, match variables),则这些变量就保存了那些与正则表达式匹配的子字符串信息(如可能是子字符串的实际内容,或者是界定子字符串的起始、结束的索引数字)。 matchVar 保存了匹配 exp 的字符串,而 subMatchVar 依次存放了和 exp 各个中单个括号语法(子模式)匹配的子字符串。

regexp 中的 switches 是命令开关选项,这些选项主要有:  

选项 说明
-nocase exp 中的小写字符可以匹配 string 中的大写和小写字符
-indices 返回界定 string 中匹配区间起始、结束的索引数值。否则返回匹配区间内字符串本身
-expanded 使用扩展语法
-line 等价于同时指定-lineanchor 和-linestop
-lineanchor 将^和$的行为改为面向行的方式
-linestop 将匹配方式改变成和字符类不匹配换行符
-about 适用于调试,返回有关模式的信息而不是试图与输入进行匹配
-all 让正则表达式在 string 中匹配所有的匹配子字符串,返回匹配次数,而且将最后一次匹配结果存入匹配变量
-inline 将原来存放在匹配变量中的值以列表的形式返回,如果同时使用了-all,则返回所有满足匹配结果的值的列表。
-start index 用 index 指定 exp 在 string 中起始匹配位置。如果使用了-indices,返回的索引是从输入字符串 string 的绝对起始位置算起而不是从 index 指定位置算起
-- 结束选项,如果表达式以-开始, 则需先用此选项

regexp示例:

set sample "Where there is a will, There is a way."

=> Where there is a will, There is a way.

set result [regexp {will} $sample match var1]

 => 1

puts "match = $match, var1 = $var1"

 => match = will,var1 = 

set result [regexp {([a-z]+) ([a-z]+) ([a-z]+)} $sample mStr var1 var2 var3]  #匹配字母a-z

 => 1

 puts "maStr = $maStr, var1 = $var1, var2 = $var2, var3 = $var3"

 => maStr = here there is, var1 = here, var2 = there, var3 = is

带有 nocase 选项的 regexp 命令 :

set result [regexp  -nocase {([a-z]+) ([a-z]+) ([a-z]+)} $sample mStr var1 var2 var3]

 => 1

puts "maStr = $maStr, var1 = $var1, var2 = $var2, var3 = $var3"

 => maStr = Where there is, var1 = Where, var2 = there, var3 = is

指明需要返回索引数值而不是字符串本身:

set result [regexp  -indices {([a-z]+) ([a-z]+) ([a-z]+)} $sample mStr var1 var2 var3]

 => 1

puts "maStr = $maStr, var1 = $var1, var2 = $var2, var3 = $var3"

 => maStr = 1 13, var1 = 1 4, var2 = 6 10, var3 = 12 13

2. regsub 命令

regsub 命令基于正则表达式完成字符串匹配和替换。

语法:

  • regsub ?switches? exp string subSpec varName

switches 是命令开关选项,主要有:

  • 开关选项-nocase、 -expanded、 -line、 -linestop、 -lineanchor、 -start index 和--与 regexp 命令开关选项作用相同

  • -all 对所有满足匹配条件的字符串范围进行替换,返回匹配和替换的次数。没有此选项时,只匹配第一个满足匹配条件的匹配范围并用 subSpec 替换之。  

替换模式 subSpec 可以是普通字符,也可以含有&和\x( x 是一个数字)。当是这两个特殊字符时, &和\x 就会被替换成与 exp 中的对应模式匹配的 string 中的匹配范围内的字符。

varName 存放替换后的字符串。  

示例:

set sample "Where there is a will, There is a way."

 =>Where there is a will, There is a way.

regsub "way" $sample "lawsuit" sample2

 => 1

puts "New:$sample2"

 => New:Where there is a will, There is a lawsuit.

使用&和\0 的 subSpec: 

regsub {([a-z]+) ([a-z]+)} $sample {"-&- lawsuit -\1- -\2-"} sample2

puts "New:$sample2"

 => New:W"-here there- lawsuit -here- -there-" is a wail, There is a way.

标签:var1,var3,var2,正则表达式,regexp,字符串,匹配
From: https://www.cnblogs.com/love-9/p/18141930

相关文章

  • 正则表达式
    Python正则表达式Python正则表达式是一种用来匹配和处理字符串的强大工具。Python提供了re模块来支持正则表达式的使用。re模块常用函数re.compile(pattern,flags=0):根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配......
  • 正则表达式中 “$” 并不是表示 “字符串结束
    作者:SethLarson译者:豌豆花下猫@Python猫英文:Regexcharacter“$”doesn'tmean“end-of-string”转载请保留作者及译者信息!这篇文章写一写我最近在用Python的正则表达式模块(re)开发CPython的SBOM工具时发现的一个令人惊讶的行为。如果用过正则表达式,你可能知道^表......
  • 正则表达式在字符串中表达
    ysyx的表达式求值环节需要自行编写规则。在样例里,官方已经给出了匹配空格、加号的样例。空格规则对应字符串为"+",表示匹配一个或更多空格。加号表示前面的符号至少出现一次。加号规则则是"\\+" ,首先,加号+在正则表达式里是特殊符号,需要一个反斜杠\转义才能执行,但是反斜杠......
  • 正则表达式常用学习
    0.简介regularexpression,规则表达式,是一种用来处理字符串的规则,巧妙的正则表达式可以节省很多判断代码.1.组成元字符特殊元字符\转义字符=>普通字符<=>特殊字符.点=>代表除了\n以外的任意字符(字符字符字符)^=>以哪个元字符开始$=>......
  • js正则表达式
    正则表达式创建正则对象//构造函数newRegExp('规则','标识')//字面量书写/规则/标识正则常用方法//reg是正则对象reg.test('字符串');//验证字符串是否满足规则//reg是正则对象,str是字符串str.replace(reg,'替换目标');//将字符串中匹配正则的部分替换为目......
  • 从Google网页中通过正则表达式获取json如何转换unicode对象
    场景:Google爬虫,获取下拉框搜索关键词,需要获取页面的里面的json字符串如下面:'{\\x22aa\\x22:{},\\x22abd\\x22:{\\x22abd\\x22:false,\\x22deb\\x22:false,\\x22det\\x22:false},\\x22async\\x22:{},\\x22attn\\x22:{},\\x22bgd\\x22:{\\x22ac\\x22:true,\\x......
  • 20个Python 正则表达式应用与技巧
    本文分享自华为云社区《Python正则表达式大揭秘应用与技巧全解析》,作者:柠檬味拥抱。Python中的re模块是用于处理正则表达式的强大工具。正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式。在本文中,我们将探讨Python中re模块的应用和一些技......
  • java中字符串替换的4种方法 replaceAll() 带正则表达式参数 str.replaceAll("[0-9]+
    java中字符串替换的4种方法replaceAll()带正则表达式参数str.replaceAll("[0-9]+","");目录前言一、String的replace()方法二、String的replaceAll()方法三、StringBuffer/StringBuilder的replace()方法四、Matcher的replaceAll()方法总结前言在日常开发中,我们对......
  • 常用正则表达式
    1.校验数字的表达式 1.数字:^[0-9]*$ 2.n位的数字:^\d{n}$ 3.至少n位的数字:^\d{n,}$ 4.m-n位的数字:^\d{m,n}$ 5.零和非零开头的数字:^(0|[1-9][0-9]*)$ 6.非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$ 7.带1-2位小数的正数或负数:^(\-)?\d+(......
  • Web API(六)之正则表达式
    WebAPI(六)之正则表达式正则表达式正则基本使用元字符边界符量词范围字符类替换和修饰符change事件判断是否有类正则表达式正则表达式(RegularExpression)是一种字符串匹配的模式(规则)使用场景:例如验证表单:手机号表单要求用户只能输入11位的......