⑴ 正则表达式的后向引用可以解释一下吗
比如正则 ab(?=cd)
它只会匹配后面是cd的ab,如果后面不是cd,那些ab就不会匹配。
还有否定的情况,即匹配后面不是什么的 内容
如 ab(?!cd) 和上面正好相反,它只会匹配后面不是cd的ab,如果后面是cd,这些ab就不匹配。
有些书上也把这种情况叫做 “环视结构”、“顺序环视”、“零宽断言”、“正向断言”等。
还有判断前面字符的情况,这叫“逆序环视”、“负向断言”等
期望这是你要的解释。还有一种和“引用”有关的是下面的情况
ab(cd)\1
这里的\1就涉及到引用【后面引用前面的】。\1代表前面的第一个括号中的内容。
这里匹配的就是abcdcd
这里的括号叫做“捕获”,可以有多个括号
\1也叫“反向引用”,如果有两个括号,\2可以引用第二个括号中的内容。
后面的可能是你问的情况。
括号和\1之间不一定挨着,中间有其他字符也是可以的。
⑵ java 正则表达式是什么
匹配首尾空格的正则表达式:(^s*)|(s*$)。
匹配html标签的正则表达式:<(.*)>(.*)</(.*)>|<(.*)/>。
配空行的正则表达式: [s| ]* 。
整数或者小数:^[0-9]+.{0,1}[0-9]{0,2}$。
只能输入数字:"^[0-9]*$"。
只能输入n位的数字:"^d{n}$"。
只能输入至少n位的数字:"^d{n,}$"。
只能输入m~n位的数字:。"^d{m,n}$"
只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。
只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"。
只能输入有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"。
只能输入非零的正整数:"^+?[1-9][0-9]*$"。
只能输入非零的负整数:"^-[1-9][]0-9"*$。
只能输入长度为3的字符:"^.{3}$"。
只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。
只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"。
只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。
只能输入由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$"。
只能输入由数字、26个英文字母或者下划线组成的字符串:"^w+$"。
验证用户密码:"^[a-zA-Z]w{5,17}$"正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。
验证是否含有^%&',;=?$"等字符:"[^%&',;=?$x22]+"。
只能输入汉字:"^[u4e00-u9fa5]{0,}$"。
验证Email地址:"^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$"。
验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式为:"01"~"09"和"1"~"12"。
验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"和"1"~"31"。
匹配中文字符的正则表达式: [u4e00-u9fa5]。
匹配双字节字符(包括汉字在内):[^x00-xff]。
应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)String.prototype.len=function(){returnthis.replace(/[^x00-xff]/g,"aa").length;}。
⑶ java正则表达式,反向匹配
你说的这些词都是中文后面跟一个/n吧,用下面的正则就好了
([\u4e00-\u9fff]+)/n
这个问题是版java分类的,java就是权这样写
import java.util.regex.*;
Pattern p = Pattern.compile("([\\u4e00-\\u9fff]+)/n");
⑷ java正则表达式,捕获组重命名怎么搞
1. 捕获组及其编号:
1) 捕获组之前讲过,就是匹配到的内容,按照()子表达式划分成若干组;
2) 例如正则表达式:(ab)(cd(ef))就有三个捕获组,没出现一对()就是一个捕获组
3) 捕获组编号规则:
i. 引擎会对捕获组进行编号,编号规则是左括号(从左到右出现的顺序,从1开始编号;
ii. 例如:
2. 反向引用:
1) 捕获组的作用就是为了可以在正则表达式内部或者外部(Java方法)引用它;
2) 如何引用?当然是通过前面讲的用捕获组的编号来引用咯!
3) 正则表达式内部引用:
i. \X:X是一个十进制数,X的范围必须落在捕获组编号范围之内,该表达式就匹配X号捕获组所匹配到的内容;
ii. 从上面的描述可以看出,\X匹配的内容是必须X号捕获组匹配成功之后才能确定的!
iii. 例如:([ab])\1,匹配aabbcc的结果是aa和bb,\1的内容必须要让1号捕获组捕获后才能确定,如果1号捕获的是a那么\1就是a,1号捕获到了b那么\1就是b;
4) 正则表达式外部引用:就是用Matcher对象的start、end、group查询匹配信息时,使用捕获组编号对捕获组引用(int group);
3. 捕获组命名:
1) 如果捕获组的数量非常多,那都用数字进行编号并引用将会非常混乱,并且难以记忆每个捕获组的内容及意义,因此对捕获组命名显得尤为重要;
2) Java 7开始提供了对捕获组命名的语法,并且可以通过捕获组的名称对捕获组反向引用(内外都行);
i. 命名捕获组的语法格式:(?<自定义名>expr)
ii. 例如:(?<year>\d{4})-(?<date>\d{2}-(?<day>\d{2}))
a. 有三个命名捕获组year、date和day
b. 从左到右编号分别为1、2、3(编号同样是有效的)
3) 命名捕获组的反向引用:
i. 正则表达式内引用:\k<捕获组名称>
!例如:(?<year>\d{4})-\k<year>可以匹配1999-1999
ii. 外部引用:Matcher对象的start、end、group的String name参数指定要查询的捕获组的名称;