正则表达式匹配字符串
问题描述:
我试图使用或者两个规则删除特定字符串的一部分:正则表达式匹配字符串
- 消除所有的辅音(S)在字符串的开头
- 消除字符串开头的所有辅音字母。
假设我的字符串是str。 ${str%%[aeoui]{1}*}
正确的第二个规则?我不知道第一条规则该怎么做。
答
我不确定你想用什么语言来实现它,所以我只是使用一些通用的语法。
1. s/^[^aeiouAEIOU]*(.*)/\1/
2. s/^[aeiouAEIOU]*(.*)/\1/
有些方法可以使其不区分大小写,但为了清晰起见,我喜欢这样具体。
这两者之间的唯一区别是[]
里面的^
只是否定了它。
*
表示零或更多。例如,如果使用+
,则#1中至少要有一个辅音,#2中至少要有一个元音,否则测试将失败。
用我的通用语法\1
返回(.*)
发现的内容。
下面是一些很简陋的Perl证明(其中$1
在打印语句在我的例子上述表现为\1
):
#!/usr/bin/perl
$string1="abcdef";
$string2="fedcba";
if ($string1 =~ /^[aeiouAEIOU]*(.*)/) {
print "Test 1 on $string1: $1\n";
}
if ($string2 =~ /^[aeiouAEIOU]*(.*)/) {
print "Test 1 on $string2: $1\n";
}
if ($string1 =~ /^[^aeiouAEIOU]*(.*)/) {
print "Test 2 on $string1: $1\n";
}
if ($string2 =~ /^[^aeiouAEIOU]*(.*)/) {
print "Test 2 on $string2: $1\n";
}
而这里的输出:
Test 1 on abcdef: bcdef
Test 1 on fedcba: fedcba
Test 2 on abcdef: abcdef
Test 2 on fedcba: edcba
其实如果我删除了{1}在表达式中工作得很好。 – 2014-09-20 01:30:26