标题解释了问题本身。
更具体地说,我需要编写一个正则表达式来接受一个“问题”,例如:"how are you today?"
。所以最后一个字符必须是"?"
。
我试过这样的事情:
m/[^a-zA-Z0-9\W{1}]/
但它接受1
或更多\W
字符
答案 0 :(得分:5)
您在问题中提供的正则表达式并不符合您的想法。
m/[^a-zA-Z0-9\W{1}]/
这将匹配不 a-z
,A-Z
,0-9
,任何非单词字符(\W
),{{ 1}}或{
。方括号内的}
否定了char组的内容。如果它在那里,它不是行的开头!
如果你需要验证最后有问号的任何输入,你需要的只是问号和行尾的metacracer。
^
/\?$/
本身就是元字符,所以你需要用反斜杠(?
)来转义它。
如果你想在最后将整个句子与问号相匹配,请想一想句子中可以包含哪些字符。它不仅可能是\
。
在http://regex101.com/上使用您的输入和正则表达式,这将使其更容易,因为它解释了正在发生的事情。
答案 1 :(得分:0)
这可能有效:
if( $question =~ m!([\w\s]+)\?$! ) {
print "question text: $1\n";
}
regexpr查找\ w和\ s(空格,制表符......),这些文字通常位于最后一个位置的问号之前的文本中
答案 2 :(得分:0)
接受一个"问题",例如:"你今天过得怎么样?"
怎么样:
$string =~ /^(?:[a-z0-9]+\s*)+\?$/i;
答案 3 :(得分:0)
试试这个。我希望你能期望匹配?
之前的任何角色,这对你有利
'm/[.+\?$]/ '
.
有助于匹配字符串的任何字符
\
忽略? (match 0 or 1 time in preceding character)
的功能,然后$
匹配最后一个字符。