Что такое ^. * И. * $В регулярных выражениях?

Может кто-нибудь объяснить смысл этих символов. Я искал их, но, похоже, я не понимаю.

Все регулярное выражение:

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

В основном это начало регулярного выражения и конечных символов.

Ответ 1

^.* //Start of string followed by zero or more of any character (except line break)

.*$ //Zero or more of any character (except line break) followed by end of string

Итак, когда вы видите это...

(?=.*[@#$%^&+=]).*$

Это позволяет любому символу (кроме разрыва строки) находиться между (?=.*[@#$%^&+=]) и концом строки.

Чтобы показать, что . не соответствует ни одному символу, попробуйте следующее:

/./.test('\n');  is false

Чтобы соответствовать любому персонажу, вам нужно что-то более похожее на [\s\S].

/[\s\S]/.test('\n') is true

Ответ 2

  • . означает "любой символ".
  • * означает "любое количество этого".
  • .* поэтому означает произвольную строку произвольной длины.
  • ^ указывает начало строки.
  • $ указывает конец строки.

Регулярное выражение говорит: может быть любое количество символов между выражением (?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]) и началом и концом искомой строки.

Ответ 3

Основные документы: http://www.php.net/manual/en/reference.pcre.pattern.syntax.php

/^.*(?=.{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.

Ответ 4

Это соответствует началу строки (^), за которой следует любой символ (. *):

^.*

Это соответствует концу строки ($), которому предшествует любой символ (. *):

.*$

Ответ 5

^

соответствует началу строки

$

соответствует концу

. *

- любое количество символов

Ответ 6

Что-то еще, что я вам помогу в будущем:

.*$

будет соответствовать два раза с учетом этой строки: "1"

Если вам интересно, почему, это потому, что он потребляет все символы, но также ничего не соответствует. Таким образом, пустая строка также является совпадением.

Ответ 7

Это похоже на типичное регулярное выражение для проверки пароля, за исключением того, что у него есть пара ошибок. Во-первых, .* в начале не принадлежит. Если какой-либо из этих представлений не удастся в начале строки, нет смысла применять их снова в следующей позиции, или следующей и т.д.

Во-вторых, в то время как регулярное выражение гарантирует, что каждый из этих трех видов символов присутствует, он ничего не говорит о остальной части строки. Возможно, это был преднамеренный выбор, но люди обычно стараются застраховать только те виды персонажей. В этом случае вы хотели бы изменить первый взгляд от (?=.{8,}) до (?=[[email protected]#$%^&+=]{8,}$).

Конечный результат:

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