我尝试使用以下两个规则之一删除给定字符串的一部分:
- 消除字符串开头的所有辅音
- 删除字符串开头的辅音以外的所有字母。
假设我的字符串是str。第二条规则的 ${str%%[aeoui]{1}*}
正确吗?我不确定第一条规则该怎么做。
最佳答案
我不确定您要使用哪种语言来实现此功能,因此我将仅使用一些通用语法。
1. s/^[^aeiouAEIOU]*(.*)/\1/
2. s/^[aeiouAEIOU]*(.*)/\1/
有一些方法可以使其不区分大小写,但我喜欢这样具体,只是为了清楚起见。
两者之间的唯一区别是 #1 中 []
内的 ^
,它只是将其取反。
*
表示零个或多个。例如,如果您使用 +
,则 #1 中必须至少有一个辅音,#2 中必须至少有一个元音,否则测试将失败。
在我的通用语法中,\1
返回 (.*)
找到的内容。
这里有一些非常粗略的 Perl 来演示(其中 print 语句中的 $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
关于regex - 匹配字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25944275/