匹配的正则表达式在文本之间不包含空格?

Tas*_*han 6 regex string

我正在寻找一个匹配的正则表达式,它在文本之间不包含空格,但它可能在文本的开头或结尾处有空格,也可能没有空格.

pol*_*nts 15

你想要这样的事情:( 在rubular.com上看到它的行动):

^\s*\S+\s*$
Run Code Online (Sandbox Code Playgroud)

说明:

  • ^ 是字符串锚点的开头
  • $ 是字符串锚点的结尾
  • \s 是空格的字符类
  • \S是否定\s(注意大小写差异)
  • * 是"零或多"重复
  • + 是"一个或多个"重复

参考


"文本"部分可以为空吗?

例如,上面的模式与空字符串匹配.如果这是预期的行为,原始规范不是很清楚,但如果允许空的"文本",那么只需使用\S*,即匹配或更多(而不是一次或多次)重复\S.

因此,这个模式(与上面相同,除了*用来代替+)

^\s*\S*\s*$
Run Code Online (Sandbox Code Playgroud)

将匹配:

  • 空字符串(即长度为0的字符串)
  • 非空字符串,只包含空格字符

什么算作"文字"字符?

上述模式用于\S定义"文本"字符,即除了空格之外的任何字符.这包括标点和符号之类的东西,即字符串" #@^$^* "匹配两种模式.目前尚不清楚这是否是所期望的行为,即它可能" ==== AWESOMENESS ==== "是期望的匹配

即使对于这种情况,该模式仍然有效,我们只需要更具体地使用我们的字符类定义.

例如,这种模式:

/^[^a-z]*[a-z]*[^a-z]*$/i
Run Code Online (Sandbox Code Playgroud)

将匹配(如rubular.com上所示):

 ==== AWESOMENESS ====
Run Code Online (Sandbox Code Playgroud)

但不是:

 ==== NOT AWESOME ==== 
Run Code Online (Sandbox Code Playgroud)

请注意,^元字符在用作字符类定义中的一个字符时,不再表示字符串锚点的开头,而是表示字符类定义的否定.

还要注意/i模式中修饰符的使用:这使得不区分大小写的匹配.实际语法可能因语言/口味而异.

参考