【发布时间】:2021-02-18 16:37:12
【问题描述】:
我正在尝试编写一个正则表达式,该表达式将用于文本框以验证其内容是否在 1 到 35 之间。文本框中的字符可以是任何字符:数字、字母、标点符号、白色空间等。这是我到目前为止所拥有的:
^[:;,\-@0-9a-zA-Zâéè'.\s]{1,35}$
如您所见,我必须列出所有字符。有没有更简单的方式来表示“所有”字符?
【问题讨论】:
标签: regex
我正在尝试编写一个正则表达式,该表达式将用于文本框以验证其内容是否在 1 到 35 之间。文本框中的字符可以是任何字符:数字、字母、标点符号、白色空间等。这是我到目前为止所拥有的:
^[:;,\-@0-9a-zA-Zâéè'.\s]{1,35}$
如您所见,我必须列出所有字符。有没有更简单的方式来表示“所有”字符?
【问题讨论】:
标签: regex
像这样:.
. 表示除换行符以外的任何字符(有时包含但通常不包含,请检查您的正则表达式风格)。
您可以将表达式重写为^.{1,35}$,它应该匹配长度为 1-35 的任何行。
【讨论】:
. 确实 not 匹配换行符,但匹配任何其他字符(除非您使用标志来告诉它)。在这种情况下,您可以尝试类似[\s\S](空格字符或非空格字符)。
echo "Hello" | grep "^.{1,35}$" 匹配,但它不...知道为什么吗?
grep 正则表达式风格--basic-regexp,按字面意思解释各种其他特殊字符,它们的特殊行为需要转义。 echo "Hello" | grep --basic-regexp "^.\{1,35\}$" 和 echo "Hello" | grep --extended-regexp "^.{1,35}$" 工作。
当不在字符类中时,它通常是元字符.。
所以使用^.{1,35}$。但是,dot 不包含换行符,除非对它应用 dot-all 修饰符。
您可以使用不带任何修饰符的^[\S\s]{1,35}$,这也包括换行符。
【讨论】:
如果你想设置 Min 1 count 而没有 Max length,
^.{1,}$
【讨论】:
^.+$ 更简单。
是的,.(点)可以匹配任何字符。使用:
^.{1,35}$
【讨论】:
如果您还想匹配换行符,那么您可能需要使用"^[\s\S]{1,35}$"(取决于正则表达式引擎)。否则,正如其他人所说,您应该使用"^.{1,35}$"
【讨论】: