Regex 正则表达式中的^.*和.*$是什么?

Regex 正则表达式中的^.*和.*$是什么?,regex,Regex,有人能解释一下这些字的意思吗。我已经查过了,但似乎不明白 整个正则表达式是: /^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$/ 所以基本上是正则表达式的开头和结尾字符。 表示“任何字符” *表示“任意数量” 因此,*表示任意长度的任意字符串 ^指示字符串的开头 $表示字符串的结尾 正则表达式表示:表达式(?=.{8,})(?=.[a-z])(?=.[a-z])(?=.[@$%^&+=])和搜索的字符串的开头和结尾之间可以有

有人能解释一下这些字的意思吗。我已经查过了,但似乎不明白

整个正则表达式是:

/^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$/
所以基本上是正则表达式的开头和结尾字符。

  • 表示“任何字符”
  • *
    表示“任意数量”
  • 因此,
    *
    表示任意长度的任意字符串
  • ^
    指示字符串的开头
  • $
    表示字符串的结尾

正则表达式表示:表达式
(?=.{8,})(?=.[a-z])(?=.[a-z])(?=.[@$%^&+=])
和搜索的字符串的开头和结尾之间可以有任意数量的字符。

^
匹配字符串的开头

$
匹配结尾


*
是任意数量的字符

这与行的开头(^)后跟任意字符(.*)相匹配:

这与前面有任何字符(.*)的行尾($)相匹配:

所以当你看到这个

(?=.*[@#$%^&+=]).*$
它允许任何字符(断行除外)位于
(?=.*[@#$%^&+=])
和字符串结尾之间

要显示
与任何字符都不匹配,请尝试以下操作:

/./.test('\n');  is false
要真正匹配任何字符,您需要类似于
[\s\s]
的内容

/[\s\S]/.test('\n') is true
主要文件:


还有一些我将来可以帮助你的东西:

.*$
将匹配两次给定此字符串:
“1”


如果你想知道为什么,那是因为它消耗了所有字符,但也没有匹配任何字符。因此,空字符串也是一个匹配项。

这看起来像一个典型的密码验证正则表达式,只是有几个错误。首先,开头的
*
不属于那里。如果这些lookahead中的任何一个在字符串开头没有成功,那么在下一个位置或下一个位置再次应用它们就没有意义了,等等

第二,虽然正则表达式确保这三种字符中的每一种都存在,但它没有说明字符串的其余部分。这可能是一个深思熟虑的选择,但人们通常试图确保只有这些类型的人物在场。在这种情况下,您需要将第一个前瞻从
(?=.{8,})
更改为
(?=[A-Za-z@$%^&+=]{8,}$)

最终结果:

/^(?=[A-Za-z@#$%^&+=]{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$/

谢谢你的回答。为什么要在最后重复。*?因为在最后一次“特定”匹配之后,文本行中可能有字符。每个人的回答都是正确的。我想补充一点,它们是无用的
/^.*(…).$/
/(…)/
完全相同。为什么我们需要在reg ex的开头和结尾使用“/”?幸好没有第十件事需要提示。;)回答得很好!你能为reg ex推荐好的备忘单吗?还有,为什么OP在开始和结束时都放“/?
/[\s\S]/.test('\n') is true
/^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$/
12345   6         7                                  89

1 - start of pattern, can be almost any character, and must have a matching character at the END of the pattern (see #9 below)
2 - anchors the pattern to the start of a line of text
3 - `.` matches any character
4 - a modifier, "0 or more of whatever came before"
  - `.*` means "0 or more of ANY characters"
5 - A positive lookahead assertion: http://www.php.net/manual/en/regexp.reference.assertions.php
6 - A repetition indictor: http://www.php.net/manual/en/regexp.reference.repetition.php
  - `{8,}` = "at least 8 of whatever came previously"
  - `.{8,}` = "at least 8 'any' characters"
7 - A character class: http://www.php.net/manual/en/regexp.reference.character-classes.php
  - `[a-z]` - any one character in the range 'a' - 'z' (the lower case alphabet)
8 - anchors the pattern to the end of the line
9 - end of the pattern, must match character used in #1 above.
.*$
/^(?=[A-Za-z@#$%^&+=]{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$/