美好的一天,
我在Perl中有一个简单的工作例程,可以交换两个单词:
即John Doe -----> Doe John
这里是:
sub SwapTokens()
{
my ($currentToken) = @_;
$currentToken =~ s/([A-Za-z]+) ([A-Za-z]+)/$2 $1/;
# $currentToken =~ s/(\u\L) (\u\L)/$2 $1/;
return $currentToken;
}
Run Code Online (Sandbox Code Playgroud)
以下用法完全符合我的要求:
print &SwapTokens("John Doe");
Run Code Online (Sandbox Code Playgroud)
但当我取消注释'$ currentToken = ~s /(\ u\L)(\ u\L)/ $ 2 $ 1 /;
我收到一个错误.我错过了什么,看起来我的语法是正确的.
TIA,
COSON
\u不是匹配大写字母的正则表达式原子.\L不是一个匹配许多小写字母的正则表达式原子.您正在寻找
s/(\p{Lu}\p{Ll}+) (\p{Lu}\p{Ll}+)/$2 $1/;
\p{Lu} Uppercase letter.
\p{Ll} Lowercase letter.
$ unichars '\p{Lu}' | head -n 5
A U+0041 LATIN CAPITAL LETTER A
B U+0042 LATIN CAPITAL LETTER B
C U+0043 LATIN CAPITAL LETTER C
D U+0044 LATIN CAPITAL LETTER D
E U+0045 LATIN CAPITAL LETTER E
$ unichars '\p{Ll}' | head -n 5
a U+0061 LATIN SMALL LETTER A
b U+0062 LATIN SMALL LETTER B
c U+0063 LATIN SMALL LETTER C
d U+0064 LATIN SMALL LETTER D
e U+0065 LATIN SMALL LETTER E
Run Code Online (Sandbox Code Playgroud)
也许你正在寻找这样的东西:
sub swap_the_words {
my ($processed_string) = @_;
$processed_string =~ s/([A-Z][A-Za-z]+) ([A-Z][A-Za-z]+)/$2 $1/;
return $processed_string;
}
print swap_the_words('John Doe'); # prints Doe John
Run Code Online (Sandbox Code Playgroud)
至于\u和\l,它们适合修改字符串 - 而不是正则表达式.例如,您可以稍微改变您的脚本......
$processed_string =~ s/([a-z]+) ([a-z]+)/\u\L$2\E \u\L$1\E/i;
...
print swap_the_words('cOsOn hAcKeR'); # Hacker Coson
Run Code Online (Sandbox Code Playgroud)
...所以你的话不仅要交换,而且还要适当的情况.但请注意,这些修饰符用于s///运算符的替换部分.
| 归档时间: |
|
| 查看次数: |
2863 次 |
| 最近记录: |