我想匹配名字和姓氏。
例如 Robert Still,单词的前后可以有空格,但是字符串只能包含两个单词。
' Robert Still ' = true
' Robert Still ' = true
'e Robert Still 4 ' = false
这是我尝试过的代码
m/^\s*[A-Z].*[a-z]\s*[A-Z].*[a-z]\s*$/
我想匹配名字和姓氏。
例如 Robert Still,单词的前后可以有空格,但是字符串只能包含两个单词。
' Robert Still ' = true
' Robert Still ' = true
'e Robert Still 4 ' = false
这是我尝试过的代码
m/^\s*[A-Z].*[a-z]\s*[A-Z].*[a-z]\s*$/
尝试这个:
#!/usr/bin/perl -w
use strict;
my @names = ('Robert Still', ' Robert Still', 'Robert Still ', '4 Robert Still 2', 'Robert e Still');
foreach (@names){
if ($_ =~ /(^\s*[A-Z]\w+\s+[A-Z]\w+\s*$)/){
print "'$_' : true\n"
}
else {
print "'$_' : false\n";
}
}
输出:
'Robert Still' : true
' Robert Still' : true
'Robert Still ' : true
'4 Robert Still 2' : false
'Robert e Still' : false
正则表达式解释:
^
线的开始 \s*
0 到无限次 [greedy] 空白 [\t \r\n\f\v][A-Z]
匹配: AZ 文字 A 和文字 Z 之间的字符范围\w+
1 到无限次 [greedy] 字字符 [a-zA-Z_\d]\s+
1 到无限次 [greedy] 空白 [\t \r\n\f\v][A-Z]
匹配: AZ 文字 A 和文字 Z 之间的字符范围\w+
1 到无限次 [greedy] 字字符 [a-zA-Z_\d]\s*
0 到无限次 [greedy] 空白 [\t \r\n\f\v]$
行结束/^ \s* \p{Lu}\S+ \s+ \p{Lu}\S+ \s* \z/x