Что означает регулярное выражение "?: ^"?
Я рассматриваю это подвыражение (это в JavaScript):
(?:^|.....)
Я знаю, что ? означает "ноль или один раз", когда он следует за символом, но не уверен, что это означает в этом контексте.
Ответы
Ответ 1
Вероятно, вы видите это в этом контексте
(?:...)
Это означает, что группа не будет захвачена или использована для обратных ссылок.
РЕДАКТИРОВАТЬ: Чтобы отразить измененный вопрос:
(?:^|....)
означает "соответствовать началу строки или совпадению...", но не захватывать группу или использовать ее для обратных ссылок.
Ответ 2
При работе с группами у вас часто есть несколько параметров, которые изменяют поведение группы:
(foo) // default behavior, matches "foo" and stores a back-reference
(?:foo) // non-capturing group: matches "foo", but doesn't store a back-ref
(?i:foo) // matches "foo" case-insensitively
(?=foo) // matches "foo", but does not advance the current position
// ("positive zero-width look-ahead assertion")
(?!foo) // matches anything but "foo", and does not advance the position
// ("negative zero-width look-ahead assertion")
чтобы назвать несколько.
Все они начинаются с "?", что является способом указания модификатора группы. В этом случае знак вопроса не имеет ничего общего с опциональностью.
Он просто говорит:
(?:^foo) // match "foo" at the start of the line, but do not store a back-ref
Иногда он просто перегружает, чтобы сохранить обратную ссылку на какую-то часть матча, которую вы не собираетесь использовать в любом случае. Когда группа существует только для того, чтобы сделать сложное выражение атомом (например, оно должно либо совпадать, либо сбой в целом), сохранение обратной ссылки является ненужной тратой ресурсов, которая может даже немного замедлить регулярное выражение. И иногда, вы просто хотите, чтобы группа 1 была первой группой, относящейся к вам, вместо первой группы в регулярном выражении.
Ответ 3
(?:some stuff)
означает, что вы не хотите сопоставлять выражение в круглых скобках отдельно. Обычно части регулярного выражения, сгруппированные в круглые скобки, группируются и могут быть указаны индивидуально (это называется использованием обратных ссылок).
См. http://www.regular-expressions.info/brackets.html
Ответ 4
Краткий ответ
Он помещает (скобку) группу в группу non-captureing.
Подробнее об этом частном выражении
Обозначение для группы, не связанной с захватом, составляет:
(?:<expresson>)
В представленном вами экземпляре каретка (^) является частью выражения, не являющегося частью нотации группы захвата. И этот экземпляр не является особым символом.
Похоже, что они используют оператор "или" (труба) с кареткой. Таким образом, они ищут совпадение с кареткой или чем-то, что находится справа от трубы, но не захватывают выражение как группу (выполняемое с помощью ?:
в начале группировки символов.
В целом
Группы, не связанные с захватом, позволяют группировать выражение таким образом, который не будет back-refernceable, а также увеличит производительность выражения.
Ответ 5
"(?: x) Соответствует 'x', но не запоминает совпадение.
https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Regular_Expressions
Ответ 6
?: Как правило, указывает на то, что группа не является захватом. Вы можете сделать некоторые исследования здесь.
Я почти уверен в любом движке регулярных выражений, но когда я переключаюсь между двигателями, я сталкиваюсь с некоторыми причудами.
Изменить: это должно быть так, что не захватывает, кажется, работает нормально.