weixin_38497575
2017-12-12 12:38
采纳率: 100%
浏览 4.8k

关于正则表达式的星号和加号

以下表达式:
(bin) 68 % set a 1b ;#给变量a赋值1b
1b
(bin) 69 % set result [regexp {1b2c*} $a resu] ;#将匹配变量a得到的结果赋值给变量resu
0 ;#返回匹配成功的次数
(bin) 70 % puts $resu ;#输出变量resu
can't read "resu": no such variable

(bin) 71 % set a z ;#给变量a赋值z
z
(bin) 72 % set result [regexp {zo*} $a resu] ;#将匹配变量a得到的内容赋值给变量resu
1 ;#返回匹配成功的次数
(bin) 73 % puts $resu ;#输出变量resu的值
z
(bin) 74 %

两个表达式,一个匹配条件是1b2c*,匹配对象字符串是1b,结果返回没有匹配到内容,但是第二个表达式匹配条件是zo*,匹配对象字符串是z,结果却匹配到了。这个是什么原因啊?命名第二个表达式表示的是带有zo开头的字符串啊,为什么能匹配到z?而第一个却匹配不到1b?
星号的意思是匹配0次到多次,所以哪位大神可以解答一下????
10币不多,请大神为小弟解惑。

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • timezhourenquan 2017-12-12 13:09
    已采纳

    号表示匹配 前面的字符0次和多次,所以第一个匹配条件1b2c*能匹配的值集合为{1b2,1b2c,1b2cc,1b2ccc,...},
    而第二个匹配条件zo*能匹配的集合为{z,zo,zoo,zooo,...},所以得到了你粘贴的结果

    打赏 评论
  • qq_37348304 2017-12-13 11:03

    由于+-*?这几个都属于正则表达式中的保留字,因此,若需要将它们作为字符中的字符元素进行搜索和替换时,必须使用转义符符号"\"
    即"+"表示字符"+"; "*"表示字符"*"; "-"表示字符"-"; "\?"表示字符"?";
    若将所有的这些字符替换为字符"/"的话,其正则表示如下:
    var strResult=str.replace(/+|-|*|\?/g,"/")

    打赏 评论

相关推荐 更多相似问题