regex - 匹配字符串的正则表达式

标签 regex linux

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

  1. 消除字符串开头的所有辅音
  2. 删除字符串开头的辅音以外的所有字母。

假设我的字符串是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/

相关文章:

javascript - 从 'one behind' 到 'one before'(之间)

regex - Perl 正则表达式不够贪婪

linux - 如何在 shell 脚本中转义空格?

linux - 模组安全规则

linux - 进行全局选项

java - Java使用的内存多于堆大小(或正确大小的Docker内存限制)

javascript正则表达式允许a-z A-Z 0-9 & @等

python - 在 Python 中用 NaN 替换一列中的多个字符

python - 如何使用正则表达式在我的字符串中找到这个单词 'অশুভ' ?

linux - 如何使用awk将同一列的2行合并为1行