需要匹配以Chapter|Section开头,以数字结尾的字符串
如"Character 1","Section 132"
但是只需要获得尾部数字
一开始用了这个正则
/^(?<=(?:Chapter|Section)[ t]*)d+$)/
发现匹配不成功
/(?<=(?:Chapter|Section)[ t]*)d+$)/
去掉^可以就可以匹配到数字了
但是为什么加了^就不能匹配到了呢,是什么导致匹配失败了呢
求解
需要匹配以Chapter|Section开头,以数字结尾的字符串
如"Character 1","Section 132"
但是只需要获得尾部数字
一开始用了这个正则
/^(?<=(?:Chapter|Section)[ t]*)d+$)/
发现匹配不成功
/(?<=(?:Chapter|Section)[ t]*)d+$)/
去掉^可以就可以匹配到数字了
但是为什么加了^就不能匹配到了呢,是什么导致匹配失败了呢
求解
不知道楼主这样写行不行.
^(Character|Section) d+$
看不大懂你的那个[ t]写法...
直接拷贝你的规则去https://regexr.com/ 会报错...
楼主能否解释下我也学习学习= =...不好意思哈哈
^放在(?:)前面。
需要匹配以Chapter|Section开头,以数字结尾的字符串
并不是加了^就会出错,而是位置不对。
去掉^只是规避掉这个问题而非解决,毕竟带不带^是有边界区别的。
10 回答11.1k 阅读
15 回答8.4k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3k 阅读✓ 已解决
8 回答6.2k 阅读
2 回答2.6k 阅读✓ 已解决
?<=
是断言,断言常和零宽
这个词一起出现,零宽断言
是在文本的某个位置判断这个位置前面或者后面的字符满足或者不满足一些条件,具体是向前还是向后,满足还是不满足就和具体的断言类型相关了。需要特别注意的是,断言只是匹配一个位置
,并不匹配
一个具体的字符,所以是零宽
。/^(?<=(?:Chapter|Section)[ t]*)d+$)/
这个正则Chapter|Section)[ t]*
,注意此时匹配的位置并未发生改变,还是在字符串的开始;综上,结合1,3和4,这个字符串就是由1到多个数字组成的;结合2,这个字符串开始的前面还需要匹配一些字符,这明显是矛盾的,一个字符串的开始位置前面怎么还会有字符。所以这个正则什么也匹配不了。
/(?<=(?:Chapter|Section)[ t]*)d+$)/
去掉^以后,这个正则匹配成功的条件是在字符串中存在这样一个位置,这个位置前面满足Chapter|Section)[ t]*
,后面是1到多个数字,然后是字符串的结尾。