首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >第一个和最后一个字符的正则条件

问第一个和最后一个字符的正则条件
EN

Stack Overflow用户
提问于 2014-06-30 03:25:27
回答 4查看 1.3K关注 0票数 1

如何编写正则表达式来匹配不以空格字符开头或结尾的字符串?匹配的字符串可以在中间包含任意字符,重要的是,单个字符串应该匹配。

我的尝试是:

代码语言:javascript
复制
/\A\S.*\S\z/

但这与一个字符是不匹配的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-06-30 03:46:10

这是一种情况,您不应该尝试构建一个匹配某物的regex,而应该构建一个与匹配的正则表达式--的补充,并消极地使用regex。

代码语言:javascript
复制
re = /\A\s|\s\z/
re !~ " "     # => false
re !~ ""      # => true
re !~ "sss"   # => true
re !~ "s ss"  # => true
re !~ " s ss" # => false
票数 3
EN

Stack Overflow用户

发布于 2014-06-30 03:46:54

代码语言:javascript
复制
is_ok = lambda do |str|
  a, z = str.chars.first, str.chars.last
  "#{a}#{z}" =~ / |\n|\t/ ? false : true
end


#"more elegant" (yeah dude I rock)
is_ok = lambda {|str| [0, -1].map{|i| str.chars[i] }.join =~ / |\n|\t/ ? false : true}
票数 1
EN

Stack Overflow用户

发布于 2014-06-30 03:29:14

使用这个正则表达式:

代码语言:javascript
复制
\A\S+(?:\s*\S+)*\Z

您可以使用这个演示的测试字符串部分来查看这是如何工作的。我假设字符串可以跨越多行,因此\A和\Z

在Ruby中,类似于:

代码语言:javascript
复制
if subject =~ /\A\S+(?:\s*\S+)*\Z/
    match = $&

解释

  • \A锚点断言我们处于主题字符串的开头
  • \S+匹配一个或多个非空白字符(包括制表符、换行符等)。另外,如果希望在开头允许换行符,但只想排除空格字符,则可以使用[^ ]+而不是\S+。
  • (?:\s*\S+)匹配任意数量的可选空格字符,后面跟着一个或多个非空格字符。
  • *量词重复了0次或多次。
  • \Z锚点断言我们位于主题字符串的末尾
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24482556

复制
相关文章

相似问题

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