用于匹配字符串的正则表达式

时间:2014-09-20 01:14:45

标签: regex linux

我正在尝试使用以下两种规则之一删除给定字符串的一部分:

  1. 消除字符串开头的所有辅音
  2. 在字符串的开头消除除辅音以外的所有辅音。
  3. 假设我的字符串是str。 ${str%%[aeoui]{1}*}对第二条规则是否正确?我不知道该为第一条规则做些什么。

1 个答案:

答案 0 :(得分:0)

我不确定您尝试使用哪种语言,因此我只使用一些通用语法。

1.  s/^[^aeiouAEIOU]*(.*)/\1/
2.  s/^[aeiouAEIOU]*(.*)/\1/

有一些方法可以使它不区分大小写,但为了清楚起见,我喜欢这样具体。

两者之间的唯一区别是#{1}}在#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";
}