Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 正则表达式不正确匹配标点(包括空格)_Ruby_Regex - Fatal编程技术网

Ruby 正则表达式不正确匹配标点(包括空格)

Ruby 正则表达式不正确匹配标点(包括空格),ruby,regex,Ruby,Regex,我试图检查字符串是否包含至少一个小写字母、大写字母和数字,但不包含标点符号(包括空格) 比如说 4aBc8Fk3应匹配 4abc8。;3不应匹配 我尝试了以下操作,但它与空格匹配: ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).{6,}[^[:punct:]]$ 有没有办法不匹配包含标点符号(包括空格)的字符串 据我所知,您在那里得到的正则表达式可以执行以下操作(我不熟悉ruby变体,而且我自己对regex还是很陌生;这会给您一个想法,但可能不是100%正确): 转

我试图检查字符串是否包含至少一个小写字母、大写字母和数字,但不包含标点符号(包括空格)

比如说

  • 4aBc8Fk3
    应匹配
  • 4abc8。;3
    不应匹配
我尝试了以下操作,但它与空格匹配:

^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).{6,}[^[:punct:]]$

有没有办法不匹配包含标点符号(包括空格)的字符串

据我所知,您在那里得到的正则表达式可以执行以下操作(我不熟悉ruby变体,而且我自己对regex还是很陌生;这会给您一个想法,但可能不是100%正确):

  • 转到字符串的开头
  • 确保字符串与后跟小写字母的任意数量的字符相匹配,例如
    --a
  • 确保字符串与后跟大写字母的任意数量的字符相匹配,例如
    --aA
  • 确保字符串与后跟数字的任意字符数匹配,例如
    --aA0
  • 如果这都是真的,请确保字符串的开头后面至少有6个随机字符,例如
    --aA0-
  • 确保后跟一个非标点符号字符(尽管这是我不确定的部分,因为我以前没有使用过字符类,也不知道它是
    [^[:punct:]
    还是
    [^:punct:]
    ),例如
    --aA0-c
  • 确保后面紧跟着字符串的末尾
  • 现在,lookaheads还允许不同的出现顺序,例如,
    0--Aa
    ,只要字符串包含后跟它们要查找的字符

    您可能需要的是
    ^[a-zA-Z0-9]{6,}$
    ,即至少六个字符,其中的字符是字母和数字(例如,这也允许
    aaaaaa

    也许可以尝试
    ^(?=.[a-z])(?=.[a-z])(?=.[0-9])[a-zA-Z0-9]{6,}$
    以确保每个组都存在,并且只获取字母数字字符(至少六个)

    我总是使用一个工具,比如慢慢地建立我的正则表达式,看看哪里出了问题,解构一个“坏”正则表达式,直到我得到一个“好”正则表达式,然后再慢慢地添加它

    希望有帮助。:)


    注意:我仍然有点不清楚您希望总共匹配多少个字符,即字符串是否为固定长度…?

    据我所知,您在那里得到的正则表达式执行以下操作(我不熟悉ruby的种类,我自己对regex还是很陌生;这会给你一个想法,但可能不是100%正确):

  • 转到字符串的开头
  • 确保字符串与后跟小写字母的任意数量的字符相匹配,例如
    --a
  • 确保字符串与后跟大写字母的任意数量的字符相匹配,例如
    --aA
  • 确保字符串与后跟数字的任意字符数匹配,例如
    --aA0
  • 如果这都是真的,请确保字符串的开头后面至少有6个随机字符,例如
    --aA0-
  • 确保后跟一个非标点符号字符(尽管这是我不确定的部分,因为我以前没有使用过字符类,也不知道它是
    [^[:punct:]
    还是
    [^:punct:]
    ),例如
    --aA0-c
  • 确保后面紧跟着字符串的末尾
  • 现在,lookaheads还允许不同的出现顺序,例如,
    0--Aa
    ,只要字符串包含后跟它们要查找的字符

    您可能需要的是
    ^[a-zA-Z0-9]{6,}$
    ,即至少六个字符,其中的字符是字母和数字(例如,这也允许
    aaaaaa

    也许可以尝试
    ^(?=.[a-z])(?=.[a-z])(?=.[0-9])[a-zA-Z0-9]{6,}$
    以确保每个组都存在,并且只获取字母数字字符(至少六个)

    我总是使用一个工具,比如慢慢地建立我的正则表达式,看看哪里出了问题,解构一个“坏”正则表达式,直到我得到一个“好”正则表达式,然后再慢慢地添加它

    希望有帮助。:)


    注意:我仍然有点不清楚您希望总共匹配多少个字符,即字符串是否为固定长度…?

    完整要求是:至少六个字符长,包含小写字母,包含大写字母,包含数字。但在我的版本中,它接受空格和标点符号,因此,根据这一点,在您的情况下,POSIX字符类可能是个坏主意,因为它们是由区域设置驱动的,
    [:punct:]
    可能不检查空格:至少六个字母数字字符,或者至少六个字符,只要它们既不是标点符号也不是空格?例如,
    有效吗?至少有六个字母数字字符。顺便说一下,根据我在bash上使用regex的经验,环顾四周是非常昂贵的操作。通过将几个正则表达式管道(嵌套)在一起,事情通常会变得更快…:)完整的要求是:至少六个字符长,包含一个小写字母,包含一个大写字母,包含一个数字。但在我的版本中,它接受空格和标点符号,因此,根据这一点,在您的情况下,POSIX字符类可能是个坏主意,因为它们是由区域设置驱动的,
    [:punct:]
    可能不检查空格:至少六个字母数字字符,或者至少六个字符,只要它们既不是标点符号也不是空格?例如,
    有效吗?至少有六个字母数字字符。顺便说一下,根据我在bash上使用regex的经验,环顾四周是非常昂贵的操作。通过将几个正则表达式管道(嵌套)在一起,事情通常会变得更快…:)