perl正则表达式接受1个非字母数字(\ W)字符

时间:2014-09-09 10:45:59

标签: regex perl

标题解释了问题本身。

更具体地说,我需要编写一个正则表达式来接受一个“问题”,例如:"how are you today?"。所以最后一个字符必须是"?"。 我试过这样的事情:

m/[^a-zA-Z0-9\W{1}]/ 

但它接受1或更多\W字符

的任何输入

4 个答案:

答案 0 :(得分:5)

您在问题中提供的正则表达式并不符合您的想法。

m/[^a-zA-Z0-9\W{1}]/ 

这将匹配 a-zA-Z0-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)的功能,然后$匹配最后一个字符。