首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >perl完全接受1个非字母数字字符(\W)

perl完全接受1个非字母数字字符(\W)
EN

Stack Overflow用户
提问于 2014-09-09 10:45:58
回答 4查看 62关注 0票数 0

标题解释了问题本身。

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

代码语言:javascript
复制
m/[^a-zA-Z0-9\W{1}]/ 

但它接受任何带有1或更多\W字符的输入。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-09-09 10:52:15

你在问题中给出的判断力并不能像你想的那样做。

M/^a-Za-Z0-9W{1}/

这将匹配任何字符,即而不是 a-zA-Z0-9、任何非单词字符(\W)、{}。方括号中的^否定char组的内容。如果它在里面的话,这不是台词的开始!

如果您需要验证任何在末尾有问号的输入,那么您所需要的都是问题标记和行尾元字符。

代码语言:javascript
复制
/\?$/

?本身就是一个元字符,所以您需要用反斜杠(\)来转义它。

如果你想把整个句子和结尾的问号匹配起来,想想这个句子中可能有什么样的字符。这可能不仅仅是\w

http://regex101.com/上玩你的输入和正则表达式,这将使它更容易,因为它解释了正在发生的事情。

票数 5
EN

Stack Overflow用户

发布于 2014-09-09 10:52:05

这可能是可行的:

代码语言:javascript
复制
if( $question =~ m!([\w\s]+)\?$! ) {
   print "question text: $1\n";
}

regexpr查找\w和\s (空格、制表符、.)在最后一个位置问号之前,你经常在课文中出现。

票数 0
EN

Stack Overflow用户

发布于 2014-09-09 10:58:09

接受一个“问题”,比如:“你今天过得怎么样?”

不如:

代码语言:javascript
复制
$string =~ /^(?:[a-z0-9]+\s*)+\?$/i;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25742651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档