测试输入的开头和结尾不是空格

时间:2016-01-01 19:32:49

标签: regex

我想选择那些没有空间开始或结束的人。

测试字符串:

  ad 
bui sfa
daf
a
fa  
    12

尝试正则表达式(没有匹配;(...):

^[^\s]*.*[^\s]*$

这是link

2 个答案:

答案 0 :(得分:4)

您的正则表达式^[^\s]*.*[^\s]*$不起作用,因为您将*量词应用于匹配任何符号但空白的[^\s]否定字符类,从而使此可选。此外,您的输入看起来是多行的,因此在在线正则表达式测试器中,您需要指定/m多项标志以查看这些行是否与您的模式匹配。此外,模式要求输入字符串中至少包含两个符号,但您还有a行(包含1个符号) - 并且它不会匹配。

您可以使用

^(?!\s|.*\s$).*$

请参阅regex demo。请注意使用/m多行标记(如果您的输入是多行,则必需)。此模式允许任何不以空格开头或结尾的字符串。

更详细的解释:

  • ^ - 开始行
  • (?!\s|.*\s$) - 如果字符串开始(由于第一个\s)或(|)结束(由于.*\s$)而导致匹配失败的否定前瞻空白
  • .*$ - 实际上匹配到最后的一行。

答案 1 :(得分:3)

尝试正则表达式:^\S+(.*\S+)?$

  • \s是一个包含空格的字符类。 \S是被否定的阶级。它代表非空白。
  • ^在一行开头匹配。
  • ^\S+匹配行开头的一个或多个非空格
  • 让我们来看看第二部分:(.*\S+)?
    • `。*表示零个或多个任意字符
    • \S+又是一个或多个非whitspaces
    • (...)?问号使得括号内的部分可选。这使得行a匹配。
  • $表示"在一行"。