【问题标题】:Regex for not empty and not whitespace非空且非空格的正则表达式
【发布时间】:2021-04-04 15:49:24
【问题描述】:

我正在尝试创建一个正则表达式,如果字符串模式包含空格或为空,它将返回 false。到目前为止我有这个

[^\s] 

我认为这将确保字符串不包含空格,但我不确定如何检查以确保它不为空。任何帮助将不胜感激。

【问题讨论】:

  • 您可以使用str.length() == 0 || str.contains(" ")
  • @NarendraYadala,这与标签和其他 whitespace characters 不匹配。

标签: regex whitespace


【解决方案1】:

/^$|\s+/ 如果匹配,则有空格或空白。

【讨论】:

  • 正确。不需要 +。只是不要在那里放*。 ;)
  • 在某些语言(例如 Ruby)中,^$ 表示行的开头或结尾,而不是字符串。但有趣的事实是,即使在这种情况下,表达式也能正常工作。
  • @skalee 有一个 PCRE 修饰符“m”可以切换多行支持
  • @Jan 是的,但是即使没有这个修饰符,这个正则表达式也能正常工作,因为 /^$/ 将匹配空字符串或多行字符串中的空行。空行=>某处有换行符=>空格。
  • 你会如何反转这个?如果字符串不是空格或空,我希望它匹配
【解决方案2】:

据我了解,您希望匹配非空白和非空字符串,因此最佳答案是相反的。我建议:

(.|\s)*\S(.|\s)*

这匹配任何包含至少一个非空白字符的字符串(中间的\S)。它的前后可以是任何内容、任何字符或空格序列(包括换行符):(.|\s)*

你可以在regex101上解释一下。

【讨论】:

  • 在尝试了我为这个问题找到的所有不同答案后,这个对我有用!
  • 我也不明白为什么这不是最佳答案。它完全符合 OP 问题的要求。
  • 几年后是时候回答这个问题了。这样做更容易,更短,而且条件是积极的。以积极的方式而不是消极的方式制定您的条件是一种很好的做法。请注意,正则表达式不返回任何内容。因此,如果您挑剔,RE 应返回 false 的要求是无法满足的。
【解决方案3】:

大多数正则表达式引擎都支持“对应部分”转义序列。也就是说,对于\s(空白),有它的对应部分\S(非空白)。

使用它,您可以检查是否至少有一个带有^\S+$ 的非空白字符。

PHP 的 PCRE has several of these escape sequences.

【讨论】:

  • 正则表达式很好,但解释有点误导。您的正则表达式匹配一个完全由非空白字符组成且长度至少为一个字符的字符串。因此,它不仅仅是“检查是否存在至少一个非空白字符”。
  • 为什么投反对票?正则表达式正在解决 OP 的问题 - 如果匹配,则字符串不为空且不包含空格。
  • 这是给我的。我只是做了str.match(/\S+/)
  • 我针对 OP 的请求测试了这个正则表达式。它允许空字符串。他们还想排除空字符串
【解决方案4】:

/^$|\s+/ 这在空白或空格时匹配

/(?!^$)([^\s])/ 当它不为空或空格时匹配

【讨论】:

    【解决方案5】:

    有点晚了,但这是我发现的一个正则表达式,它为空白或空白返回 0 个匹配项:

    /^(?!\s*$).+/
    

    您可以在regex101 进行测试

    【讨论】:

      【解决方案6】:

      我最终使用了与接受的答案类似的东西,稍作修改

      (^$)|(\s+$)
      

      Expresso的解释

      从 2 个选项中选择 (^$) [1] 一个编号的捕获组^$ 行首^ 行尾 $ [2] 一个编号的捕获组 (\s+$) 空格,一个或多个重复 \s+ 行尾 $

      【讨论】:

      • 您可能还想将这些标记为非捕获组:(?:^$)|(?:\s+$)
      【解决方案7】:

      /^[\s]*$/ 匹配空字符串和仅包含空格的字符串

      【讨论】:

      • 这不是媒体所要求的。
      • 你可以去掉那里的方括号。 /^\s*$/ 会做同样的事情。
      • @Narendra:是的,但问题是在某处找到包含个空白字符的字符串,而不仅仅是包含个空白字符。
      • @TimPietzcker 我明白了。然后/^$|\s/ 正如您在上面指出的那样更有意义。但我不确定为什么 OP 会为此使用正则表达式,因为在这种情况下,String 之类的 str.length == 0 || str.contains(" ") 方法会更方便。
      • @Narendra:问题“为什么是正则表达式?”可能是 SO 上 cmets 中被问得最多的问题之一 :)
      猜你喜欢
      • 1970-01-01
      • 2020-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-03
      相关资源
      最近更新 更多