\num 匹配 num,其中 num 是一个正整数.对所获取的匹配的引用.例如,'(.)\1' 匹配两个连续的相同字符.

作者&投稿:蒙鱼 (若有异议请与网页底部的电邮联系)
初学正则表达式遇到 的问题~

我觉得初学者,对于这个向后引用可以先忽略不看,这部分比较难理解一点,下面是一个例子

假设你想匹配一个HTML标签的开始标签和结束标签,以及标签中间的文本。比如This is a test,我们要匹配和以及中间的文字。我们可以用如下正则表达式:“]*>.*?”

首先,“”的第一个字符“”的字符。最后正则表达式的“>”将会匹配“”的“>”。接下来正则引擎将对结束标签之前的字符进行惰性匹配,直到遇到一个“”

^/.*\\.do$ 表示匹配一个以“/”开头,“do”结尾,中间必须出现一个“\”,而开头的"/"和中间的“\”中间可以有任意的字符0个或者多个,且中间的“\”和结尾的“do”之间必须要以个字符

这是正则表达式的向后引用,num是1到99的数字,
um代表正则表达式中的相应1到99的捕获组的引用.

例子中(.)\1

.表示匹配除换行符外的任意一个字符

(.)表示捕获匹配除换行符外的任意一个字符,因为是唯一的捕获组,所以它是第一捕获组

\1是向后引用第一捕获组的数据,就是点所匹配的字符.

所以(.)\1匹配象aa,bb,好好等,两个连续的相同字符.

我给你个Java语言的例子,你看看吧.

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class AA {
 public static void main(String[] args) {
  String s="aa bb 好好";
  String regex="(.)\\1";
  Pattern p=Pattern.compile(regex);
  Matcher m=p.matcher(s);
  while(m.find()){
   System.out.println(m.group());
  }
 }
}

运行结果

aa

bb

好好



\ 后面加数字有2种情况

1、\后面1到99 表示匹配第几个括号的重复字符
例如
>>> re.search(r'(a)\1','aa') #匹配第一个括号内的重复字符
<_sre.SRE_Match object; span=(0, 2), match='aa'>

>>> re.search(r'(a)(b)(c)\3','abccccc') #匹配第三个括号内的重复字符
<_sre.SRE_Match object; span=(0, 4), match='abcc'>
还有一种情况
\ 后面0或是三位数 表示8进制所对应的ascii码字符
re.search(r'(abc)\141' , 'abcaa') #八进制 141 == 十进制97 对应ascii码小写 a
>>> re.search(r'(abc)\141' , 'abcaa')
<_sre.SRE_Match object; span=(0, 4), match='abca'>

不知所云~


通榆县15597248487: 输入一个有10个整型元素的数组,输入一个整数num,查找num在数组中的位置 -
村待赛茜: #include int fun(int arr[],int n) { int i,num=0; for(i=0;i if(n==arr[i]) return (i+1); return 0; } int main() { int arr[10]; int n,i; scanf("%d",&n); for(i=0;i scanf("%d",&arr[i]); if(!fun(arr,n)) printf("Not found!\n"); else printf("%d\n",fun(arr,n)); return 0; }

通榆县15597248487: 这里为什么要用num/=10;? -
村待赛茜: num/=10;的意思是:将num除以10取余数赋给num,即num=num/10;这样,就可以根据分数段进行评分了,比如num = 92,则num/10 =9,那么进入switch判断以后,这个同学就可以获得"A"的评分.

通榆县15597248487: C++中这个num = num&(num - 1);是什么意思呢? -
村待赛茜: &在这里就是逻辑"与"运算,所以就是将num和num-1的值进行"与"运算再将运算结果赋值给num

通榆县15597248487: 用户输入两个整数,num1和num2 请找出num1(含)~num2(含)之间所有的7的倍数 考虑num1比num2大的情况 -
村待赛茜: #include void main() {int a,b,num1,num2,temp; scanf("%d %d",&num1,&num2); if(num1a=num1;b=num2; while(b!=0) {temp=a%b; a=b; b=temp;} printf("%d\n",a); printf("%d\n",num1*num2/a); }

通榆县15597248487: c语言中,m=(num1>num2)?num1:num2;这个语句什么意思?里面的问好和冒号是什么作用 -
村待赛茜: m=(num1>num2)?num1:num2; 这个 ?+: 是一个三目运算 意思是:如果 num1大于num2 那么 m等于 num1 否则 m等于 num2;相当选 if .. else... 这个 m=(num1>num2)?num1:num2;可以写成if(num1>num2) {m=num1; } else {m=num2; }

通榆县15597248487: C语言程序题:输入任意三个整数num1、num2、num3,求三个数中的最大值 -
村待赛茜: 把num1与num2比较、把其中较大的值赋予变量a、再把a与num3比较、最后打印里面最大的值. 希望采纳、谢谢

通榆县15597248487: 使用do...while循环,编写一个程序.接收2个数字num1,num2.找出这两个数字之间所有奇数的和. -
村待赛茜: #includeint main(){ int num1,num2, sum=0; scanf("%d%d". &num1,&num2); if(num1求采纳

通榆县15597248487: 编写num函数,其功能是:统计5个数中,有几个数满足各位数字均为偶数的条件,并将个数通过return语句返回 -
村待赛茜: b=a[i]/1000;//这条语句不对, c=a[i]/100%10; d=a[i]/10%10; e=a[i]%10;

通榆县15597248487: C语言 num - = num *=num+num; -
村待赛茜: num*=num+num 先算 结果为42 num-=num 这个是最后算的,不管前面是什么答案最后都为零

通榆县15597248487: excel中出现#NUM如何解决 -
村待赛茜: 老兄,你这个函数编的有些问题.问题出在(A19^2-(18*A18)^2)^0.5的^0.5处.当你的(A19^2-(18*A18)^2)^算出正数来还好,但是一旦是负数,那么负数怎么可能开根呢?所以就有错了.补充:可以.=IF(ISERROR(A19),"0","A19")

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网