Что это за регулярное выражение, ищущее

preg_match ("/[-_^%&().A-Z0-9]/", $file) 

По внешнему виду, я вижу, что хвост – это Anything AZ и 0-9, но не уверен в начале. Поскольку ^ не экранируется, поэтому он может быть буквальным «^» или оцениваться как «NOT», а также «.», «(» И «)». Поэтому я немного смущен. Имеет ли вещи внутри опционального [] означает, что вещи буквализованы?

Он просто ищет один из символов в классе символов. Т.е. один из:

  • Дефис-минус, подчеркивание, каретка, процент, амперсант, круглые скобки, точка
  • Капитальные латинские буквы
  • арабские цифры

^ только интерпретируется как отрицающий класс символов, когда в самом начале класса. . полностью утрачивает свое особое значение внутри классов персонажей. Так что да, в классах символов многие специальные символы регулярного выражения используются буквально. С исключениями, хотя следующий список не является исчерпывающим:

  • Hyphen-minus ( - ) указывает диапазон, когда между двумя другими символами (т.е. не в начале или в конце).
  • Карет ( ^ ), как описано выше.
  • Также могут использоваться предопределенные классы символов (например, \w ), которые образуют объединение с символами этого класса. Таким образом, ваш характерный класс можно сократить до [-^%&().\w] .

^ только имеет особое значение внутри [] если это первый символ.
- имеет смысл только внутри [] если между двумя буквальными символами .
. , ( и ) не имеют особого значения внутри [] .

Просто прочитав основную информацию в документах , вы все это расскажете.

Регулярное выражение просто соответствует одному из символов в классе.