正则表达式匹配连续相同字符

软件和网站开发以及相关技术探讨
回复
knowfarway
帖子: 877
注册时间: 2007-08-25 10:37
送出感谢: 0
接收感谢: 0
联系:

正则表达式匹配连续相同字符

#1

帖子 knowfarway » 2009-03-02 1:57

请教:如何用正则表达式匹配连续的相同字符?
比如:
aaa
goooooood
goooogle
hh
alenbull
帖子: 50
注册时间: 2007-10-31 17:00
送出感谢: 0
接收感谢: 1 次

Re: 正则表达式匹配连续相同字符

#2

帖子 alenbull » 2009-03-02 3:30

不知道你要的结果是什么?

[root@ubuntu-alen /home/alen/app] 06:02
$ cat test
aaa
goooooood
goooogle
hh

[root@ubuntu-alen /home/alen/app] 06:03
$ cat test |tr -s '[a-z]'
a
god
gogle
h
头像
anticlockwise
帖子: 2393
注册时间: 2007-03-01 20:46
来自: 湖南长沙
送出感谢: 0
接收感谢: 0
联系:

Re: 正则表达式匹配连续相同字符

#3

帖子 anticlockwise » 2009-03-02 9:09

knowfarway 写了:请教:如何用正则表达式匹配连续的相同字符?
比如:
aaa
goooooood
goooogle
hh
这样的正则表达式在不知道连续的字符是哪个的情况下,是不太可能的,不过可以用这个:"(.)\1+"来匹配,但是我也只在Perl中见过这样的正则表达式,比较特殊~~
头像
HuntXu
论坛版主
帖子: 5778
注册时间: 2007-09-29 3:09
送出感谢: 0
接收感谢: 6 次

Re: 正则表达式匹配连续相同字符

#4

帖子 HuntXu » 2009-03-02 9:11

a{3}
o{5}
o{2,4}
h{2}
HUNT Unfortunately No Talent...
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

Re: 正则表达式匹配连续相同字符

#5

帖子 eexpress » 2009-03-02 9:12

+就是了
{2,}至少2个
怎么不man的。
● 鸣学
头像
HuntXu
论坛版主
帖子: 5778
注册时间: 2007-09-29 3:09
送出感谢: 0
接收感谢: 6 次

Re: 正则表达式匹配连续相同字符

#6

帖子 HuntXu » 2009-03-02 9:13

原来是不知道连续字符的情况...理解错误...
HUNT Unfortunately No Talent...
头像
fantast_xue
帖子: 29
注册时间: 2009-01-07 16:30
送出感谢: 0
接收感谢: 0
联系:

Re: 正则表达式匹配连续相同字符

#7

帖子 fantast_xue » 2009-03-02 9:39

正则表达式基本规则
http://deskangel.com/wordpress/?p=64
knowfarway
帖子: 877
注册时间: 2007-08-25 10:37
送出感谢: 0
接收感谢: 0
联系:

Re: 正则表达式匹配连续相同字符

#8

帖子 knowfarway » 2009-03-02 11:12

alenbull 写了:不知道你要的结果是什么?

[root@ubuntu-alen /home/alen/app] 06:02
$ cat test
aaa
goooooood
goooogle
hh

[root@ubuntu-alen /home/alen/app] 06:03
$ cat test |tr -s '[a-z]'
a
god
gogle
h
谢谢你的例子,我好好研究一下,我是在perl下做的。
knowfarway
帖子: 877
注册时间: 2007-08-25 10:37
送出感谢: 0
接收感谢: 0
联系:

Re: 正则表达式匹配连续相同字符

#9

帖子 knowfarway » 2009-03-02 11:13

anticlockwise 写了:
knowfarway 写了:请教:如何用正则表达式匹配连续的相同字符?
比如:
aaa
goooooood
goooogle
hh
这样的正则表达式在不知道连续的字符是哪个的情况下,是不太可能的,不过可以用这个:"(.)\1+"来匹配,但是我也只在Perl中见过这样的正则表达式,比较特殊~~
谢谢指点了!好像(.)这种方法也不奏效,我就是在perl里面试验的。
knowfarway
帖子: 877
注册时间: 2007-08-25 10:37
送出感谢: 0
接收感谢: 0
联系:

Re: 正则表达式匹配连续相同字符

#10

帖子 knowfarway » 2009-03-02 11:15

HuntXu 写了:原来是不知道连续字符的情况...理解错误...
eexpress 写了:+就是了
{2,}至少2个
怎么不man的。
谢谢两位的帮助!
头像
anticlockwise
帖子: 2393
注册时间: 2007-03-01 20:46
来自: 湖南长沙
送出感谢: 0
接收感谢: 0
联系:

Re: 正则表达式匹配连续相同字符

#11

帖子 anticlockwise » 2009-03-02 18:36

knowfarway 写了:
anticlockwise 写了:
knowfarway 写了:请教:如何用正则表达式匹配连续的相同字符?
比如:
aaa
goooooood
goooogle
hh
这样的正则表达式在不知道连续的字符是哪个的情况下,是不太可能的,不过可以用这个:"(.)\1+"来匹配,但是我也只在Perl中见过这样的正则表达式,比较特殊~~
谢谢指点了!好像(.)这种方法也不奏效,我就是在perl里面试验的。
hmm... 奇怪,你可以看看这篇博客:http://icfun.blogspot.com/2008/07/regex ... utive.html
knowfarway
帖子: 877
注册时间: 2007-08-25 10:37
送出感谢: 0
接收感谢: 0
联系:

Re: 正则表达式匹配连续相同字符

#12

帖子 knowfarway » 2009-03-03 1:11

谢谢楼上,我把你给的页面中的例子做了一次,結果是有效的:
my $string = "22 333 4444 55555 666666 7777777 88888888 999999999";
my @array = $string =~ /(.)\1{1,}/g;
print "@array\n";
得到的結果是2 3 4 5 6 7 8 9
但是,/(.)\1{1,}/按意义来讲应该分別是匹配的結果:22 333 4444 .....
正则表达式后的/g修饰符表示全局匹配,不会影响这个結果,为什么@array中得到的結果只是2 3 4 ....呢?我哪有理解错误了吗?
然后我在perl中并没有看到\1这种表示方法。
头像
anticlockwise
帖子: 2393
注册时间: 2007-03-01 20:46
来自: 湖南长沙
送出感谢: 0
接收感谢: 0
联系:

Re: 正则表达式匹配连续相同字符

#13

帖子 anticlockwise » 2009-03-03 1:27

knowfarway 写了:谢谢楼上,我把你给的页面中的例子做了一次,結果是有效的:
my $string = "22 333 4444 55555 666666 7777777 88888888 999999999";
my @array = $string =~ /(.)\1{1,}/g;
print "@array\n";
得到的結果是2 3 4 5 6 7 8 9
但是,/(.)\1{1,}/按意义来讲应该分別是匹配的結果:22 333 4444 .....
正则表达式后的/g修饰符表示全局匹配,不会影响这个結果,为什么@array中得到的結果只是2 3 4 ....呢?我哪有理解错误了吗?
然后我在perl中并没有看到\1这种表示方法。
该正则表达式匹配的时候,只有(.)的内容被匹配,\1只是对(.)的一个引用而已,相当于$1,不会进入最终的被匹配的字符。但如果你这样判断:
if ($string =~ /(.)\1+/) {
}
是会为true的。我对Perl知识有限,只能说这么多了,毕竟我是主要用Python和Java的,所以抱歉了……
knowfarway
帖子: 877
注册时间: 2007-08-25 10:37
送出感谢: 0
接收感谢: 0
联系:

Re: 正则表达式匹配连续相同字符

#14

帖子 knowfarway » 2009-03-03 1:38

大致有点明白了。
谢谢你耐心的回答!
tusooa
帖子: 6546
注册时间: 2008-10-31 22:12
系统: 践兔
送出感谢: 6 次
接收感谢: 10 次
联系:

Re: 正则表达式匹配连续相同字符

#15

帖子 tusooa » 2009-08-16 15:30

代码: 全选

#!/bin/bash
read var
case $var in
[a]*)#some cmds
;;
g[o]*d)#some cmds
;;
g[o]*gle)#some cmds
;;
*);;
esac

代码: 全选

] ls -ld //
回复

回到 “软件/网站开发”