我想匹配名字和姓氏。
e.g。 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*$/
答案 0 :(得分:4)
试试这个:
#!/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到无限次[贪心]空白[\ t \ r \ n \ f \ v] [A-Z]
匹配:A-Z Literal A和Literal Z之间的字符范围\w+
1到无限次[贪心]字符[a-zA-Z_ \ d] \s+
1到无限次[贪心]空白[\ t \ r \ n \ f \ v] [A-Z]
匹配:A-Z Literal A和Literal Z之间的字符范围\w+
1到无限次[贪心]字符[a-zA-Z_ \ d] \s*
0到无限次[贪心]空白[\ t \ r \ n \ f \ v] $
行尾答案 1 :(得分:0)
/^ \s* \p{Lu}\S+ \s+ \p{Lu}\S+ \s* \z/x