有关正则表达式的问题? 10
请问这个正则表达式该怎么解释呢?希望可以有解析的思路。“(?is)<a(?:(?!href=).)”谢谢...
请问这个正则表达式该怎么解释呢?希望可以有解析的思路。
“(?is)<a(?:(?!href=).)”
谢谢 展开
“(?is)<a(?:(?!href=).)”
谢谢 展开
展开全部
楼圆者主误解了(?:)的意义,(?:)是相对于()的一个概念。()的意思有两个,一个有的书上叫记忆,就是把匹配的字符保存在寄存器里,以备后用,另一个意思是分组,所以()又叫记忆分组。而(?:)只有分组的功能,分组的意思是把组内的部分看成是同一个对象对待,比如一个字符串,经常没腔芹用来分割并列逻辑(就是'|')。所以分组符号只是不把匹配内容放到寄存器里,他里边的内容还是要匹配的。举个例子,比如我要匹配这样一个字符串,它由三个数字字符组成,而且第一个和第三个字符相同,这就需要记忆分组了:"(\d)\d\1",这里的\d 表示数字字符,这句话的意思是,首先匹配一个数字字符并把它记到寄存器让后再匹配下一个数字,最后寻找和的一个字符相同的数字字符,这里的\1表示第一个被记忆的分组。所以"(\d)(\d)\2\1"就表示首末相同的四数字字符串。如果想匹配三个连续的数字枯毕字符那么:"(\d\d\d)"和"(?:\d\d\d)"都可以达到要求,唯一的区别就是第二个方法没有将匹配内容存储。很显然引入(?:)就是为了在只需要分组的情况下减少cpu资源的消耗。如果要实现部分匹配可以利用环视,楼主的第一个方程可以这么写:(?<=the )white(?= queen,)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询