Рубрики
Uncategorized

PHP preg_ Replace() регулярно заменяет все подходящие строки

Автор оригинала: David Wong.

Данные, которые должны быть обработаны нашей программой, не всегда разрабатываются с учетом заранее продуманной базы данных или не могут храниться в структуре базы данных. Например, механизм шаблонов анализирует шаблон, фильтрует конфиденциальную информацию о мусоре и так далее. В общем, мы используем регулярные для сопоставления preg в соответствии с нашими правилами. _ Совпадение, замените preg_ замените. Но в общих приложениях есть только некоторые базы данных crud, и возможностей для регулярных манипуляций немного. Согласно вышесказанному, существует два сценария: статистический анализ, сопоставление и замена.

PHP preg_ Заменить() регулярная замена, в отличие от обычной замены JavaScript, PHP preg_ По умолчанию заменяет () заменяет все элементы критериев соответствия символов.

Большинство языков имеют похожие регулярные выражения, но есть тонкие различия.

Регулярное выражение PHP

\ Отметьте следующий символ как специальный символ, или исходный символ, или обратную ссылку, или восьмеричный escape-символ. Например, “\ n” соответствует символу “n”. “\ \ n” соответствует разрыву строки. Последовательность ‘\ \’ соответствует’ \ ‘и’ \ (‘соответствует’ (‘.
^ Соответствует началу входной строки. Если свойство многострочности объекта регулярного выражения установлено, ^ также соответствует позиции после “\ n” или “\ R”.
$ Соответствует концу входной строки. Если свойство многострочности объекта регулярного выражения установлено, $также соответствует позиции перед “\ n” или “\ R”.
* Соответствует предыдущему подвыражению ноль или более раз. Например, Zo * может совпадать с “Z” и “zoo”. *Эквивалентно {0,}.
+ Соответствует предыдущему подвыражению один или несколько раз. Например, “Zo +” может соответствовать “Zo” и “zoo”, но не “Z”. +Эквивалентно {1,}.
? Соответствует предыдущему подвыражению ноль или один раз. Например, “делать (А)?” может совпадать с “делать” в “делает” или “делает”. ? эквивалентно {0,1}.
{n} N – неотрицательное целое число. Сопоставьте определенные n раз. Например, “O {2}” не может совпадать с “O” в “Бобе”, но может совпадать с двумя “O” в “еде”.
{n,} N – неотрицательное целое число. Совпадение по крайней мере N раз. Например, “O {2,}” не может совпадать с “O” в “Bob”, но может совпадать со всеми “O” в “fooood”. “O {1,}” эквивалентно “O +”. “O{0,}” эквивалентно “o*”.
{n,m} M и N – неотрицательные целые числа, где n. Совпадают не менее n раз и не более m раз. Например, “O {1,3}” будет соответствовать первым трем “о” в “еде”. “O {0,1}” эквивалентно “O?”. Обратите внимание, что между запятыми и двумя числами не может быть пробелов.
? Когда символ следует любому другому ограничению (*, +,?, {n}, {n,}, {n, m}), соответствующий шаблон не является жадным. Не Жадный шаблон соответствует искомой строке как можно меньше, в то время как жадный шаблон по умолчанию максимально соответствует искомой строке. Например, для строки “оооо”, “О?” будет соответствовать одному “О”, а “О +” будет соответствовать всем “О”.
. точка Соответствует любому отдельному символу, кроме “\ n”. Чтобы соответствовать любому символу, включая “\ n”, используйте шаблон типа ” [\s \ S]”.
(рисунок) Сопоставьте шаблон и получите совпадение. Полученное совпадение можно получить из сгенерированной коллекции совпадений, используя коллекцию подматчей в свойствах VBScript и $0 в свойствах JScript $9. Чтобы сопоставить символы в круглых скобках, используйте ‘\ (‘ или ‘\)’.
(?:шаблон) Сопоставьте шаблон, но не получите совпадающих результатов, то есть это не совпадение, которое не сохраняется для последующего использования. Это полезно при использовании символа или “(|)” для объединения частей шаблона. Например, “отрасль y (?: y| ies)” – это более простое выражение, чем “отрасль| отрасли”.
Перенаправьте положительный предварительный просмотр, который соответствует строке поиска в начале любой строки, соответствующей шаблону. Это совпадение не является приобретением, то есть совпадение не нужно приобретать для последующего использования. Например, “windows| 98| nt| 2000)” может соответствовать “windows” в “Windows 2000”, но не “windows” в “Windows 3.1”. Предварительный запрос не использует символы, то есть после совпадения следующий поиск соответствия начинается сразу после последнего совпадения, а не после символов, содержащих предварительный запрос.
(?!шаблон) Положительный отрицательный предварительный поиск соответствует строке поиска в начале любой строки, которая не соответствует шаблону. Это совпадение не является приобретением, то есть совпадение не нужно приобретать для последующего использования. Например, “windows (?! 95/98| nt| 2000)” может соответствовать “windows” в “Windows 3.1”, но не “windows” в “Windows 2000”.
Обратная положительная предварительная проверка аналогична прямой положительной предварительной проверке, но в противоположном направлении. Например, “(?| 98| nt| 2000) windows” может соответствовать “windows” в “2000 windows”, но не “windows” в “3.1 windows”.
(? Обратная отрицательная предварительная проверка аналогична положительной отрицательной предварительной проверке, но в противоположном направлении. Например “(?
х / у Сопоставьте X или y. Например, “z|еда” может совпадать с “Z” или “еда”. “(z|f) уд” соответствует “Зод” или “еда”.
[xyz] Набор символов. Сопоставьте любой из содержащихся символов. Например, “[ABC]” может совпадать с “a” в “обычном”.
[^xyz] Набор отрицательных символов. Соответствует любому символу, который не включен. Например, “[^ ABC]” может совпадать с “ОБЫЧНЫМ” в “обычном”.
[а-я] Диапазон символов. Соответствует любому символу в указанном диапазоне. Например, “[A-Z]” может соответствовать любому строчному буквенному символу от “a” до “Z”. Примечание: только когда дефис находится внутри группы символов и между двумя символами, он может представлять диапазон символов; если он находится в начале группы символов, он может представлять только сам дефис
[^а-я] Диапазон отрицательных символов. Соответствует любому символу, который не входит в указанный диапазон. Например, “[^ A-Z]” может соответствовать любому символу, который не находится в диапазоне от “a” до “Z”.
\b Сопоставьте границу слова, то есть положение между словом и пробелом. Например, “Er \ B” может соответствовать “Er” в “никогда”, но не “Er” в “глаголе”.
\B Сопоставьте границы без слов. “Er \ B” может соответствовать “Er” в “глаголе”, но не “Er” в “никогда”.
\ cx Соответствует контрольному символу, указанному X. Например, \ cm соответствует элементу управления-m или возврату каретки. Значение X должно быть одним из A-Z или A-Z. В противном случае C рассматривается как оригинальный символ “C”.
\d Соответствует числовому символу. Эквивалентно [0-9].
\D Соответствует нечисловому символу. Эквивалентно [^ 0-9].
\f Сопоставьте разрыв страницы. Эквивалентно \ x0c и \ CL.
\n Сопоставьте разрыв строки. Эквивалентно \ x0 и \ CJ.
\r Сопоставьте возврат кареты. Эквивалентно \ x0d и \ cm.
\s Соответствует любым пробелам, включая пробелы, вкладки, разрывы страниц и так далее. Эквивалентно [\ f \ n \ R \ t \ v].
\S Соответствует любым символам, не являющимся пробелами. Эквивалентно [^ \ f \ n \ R \ t \ v].
\t Сопоставьте вкладку. Эквивалентно \ X09 и \ CI.
\v Соответствует вертикальной вкладке. Эквивалентно \ x0B и \ CK.
\w Сопоставьте любые символы слов, которые содержат подчеркивания. Эквивалентно “[a-za-z0-9_ ]”.
\W Соответствует любому не словесному символу. Эквивалентно “[^ a-za-z0-9″_ ]”.
\xn Сопоставьте n, где n-шестнадцатеричное значение escape. Шестнадцатеричное значение escape должно состоять из двух цифр, как определено. Например, “\ x41” соответствует “a”. “\ x041” эквивалентно “\ X04 & 1”. Кодировка ASCII может использоваться в регулярных выражениях.
\ Нум Сопоставьте num, где num-положительное целое число. Ссылка на полученное совпадение. Например, “(.) \ 1” соответствует двум последовательным одинаковым символам.
\n Определяет восьмеричное экранирующее значение или обратную ссылку. Если до этого было по крайней мере n полученных подвыражений, то n является обратной ссылкой. В противном случае, если n-восьмеричное число (0-7), то n-это восьмеричное экранирующее значение.
\ Нм Определяет восьмеричное экранирующее значение или обратную ссылку. Если перед \ nm есть хотя бы подвыражения nm get, nm является обратной ссылкой. Если перед \ n m есть по крайней мере n выборок, то n-это обратная ссылка, за которой следует текст M. Если ни одно из предыдущих условий не выполнено, если и N, и m являются восьмеричными цифрами (0-7), то \ nm будет соответствовать восьмеричному выходному значению nm.
\ нмл Если n-восьмеричное число (0-7), а m и L-оба восьмеричных числа (0-7), то восьмеричное значение escape NML совпадает.
\один Соответствует n, где n-символ Юникода, представленный четырьмя шестнадцатеричными цифрами. Например, \ \ u00a9 соответствует символу авторского права ().

Приведенная выше таблица представляет собой исчерпывающее объяснение регулярных выражений, в то время как обычные символы в товарных знаках имеют особые значения и больше не представляют значения исходных символов. Например, ” + ” в регулярном выражении не представляет знак плюс, а представляет одно или несколько совпадений. Если вы хотите, чтобы “+” представляло знак плюс, вам нужно добавить “\” перед ним, то есть использовать “\ +” для представления знака плюс.

То есть все обычные символы имеют определенное значение. Если вам нужно использовать их для представления значения исходных символов, вам нужно добавить “\” перед ними. Даже для нерегулярных символов нет проблем с использованием “\” escape.

Регулярные выражения должны быть окружены разделителями. В JavaScript разделителем является “/”. В PHP чаще используется “/” для разграничения или “×” для разграничения, и оно должно быть заключено в кавычки.

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

Разделитель регулярных выражений PHP

Регулярные выражения в большинстве языков используют “/” в качестве разделителя. В PHP вы также можете использовать “ා” для разграничения. Если строка содержит большое количество символов”/”, вам необходимо экранировать эти символы”/”, когда вы используете “/” для разделения, но вам не нужно экранировать, когда вы используете “#”.

С помощью двух приведенных выше кодов регулярной замены PHP мы можем обнаружить, что если обычный оператор содержит большое количество “/”, то можно использовать “/” или “ා” в качестве разделителя, но “#” может сделать код более лаконичным. Однако технология электронного измерения предполагает, что вы все еще используете “/” в качестве разделителя, потому что в таких языках, как JavaScript, вы можете использовать только “/” в качестве разделителя, что может сформировать привычку писать и работать на других языках.

Модификатор регулярных выражений PHP

Модификатор помещается в конце разделителя регулярных выражений PHP ‘/’ перед заключительной кавычкой регулярного выражения.

Если вы знакомы с регулярными выражениями JavaScript, вы можете быть знакомы с модификатором “g” регулярных выражений JavaScript, который представляет соответствие всем подходящим элементам. В обычной подстановке PHP это элемент, который соответствует всем условиям символа, поэтому модификатор JavaScript “g”отсутствует.

PHP обычный китайский и игнорирует регистр PHP preg_ Replace() чувствителен к регистру и может совпадать только со строками в кодировке ASCII. Если вам нужно сопоставить такие символы, как символы без учета регистра и китайские иероглифы, вам необходимо добавить соответствующий модификатор I или U.

Регистр и китайский языки чувствительны в PHP, но в обычном JavaScript они чувствительны только к регистру. Игнорирование регистра также работает с помощью модификатора I. Однако JavaScript не нужно указывать, является ли это специальным символом, таким как китайский язык UTF-8, который может напрямую соответствовать китайскому языку.

Обычный экземпляр новой строки PHP

Когда регулярное выражение PHP встречает символ новой строки, оно обрабатывает символ новой строки как обычный символ в середине строки. Общий символ. Не совпадает с \ n, поэтому возникает много проблем при обнаружении регулярности строк с разрывами строк.

////Хотите заменить $weighty выше на jb51.net

echo preg_replace(‘/^[A-Z].*[A-Z]$/’,”,$weigeti);//Это регулярное выражение должно соответствовать элементам, содержащим только \ W, $weigeti начинается с V, соответствует [A-Z] и заканчивается u, соответствует [A-Z]. не удается сопоставить \ n//Вывод [jb51.net регистрирует вас]

echo preg_replace(‘/^[A-Z].*[A-Z]$/s’,”,$вес);//Это может быть сопоставлено с модификаторами, то есть. Таким образом, все предложение совпадает, а вывод пустой//Вывод []

echo preg_replace(‘/^[A-Z].*[A-Z]$/m’,”,$weigeti);//Модификатор используется здесь для независимого сопоставления \ n в виде нескольких строк. Это эквивалентно:/* $preg_m=preg_replace(‘/^[A-Z].*[A-Z]$/m’,”,$weigeti);

$p=’/^[A-Z].*[A-Z]$/’; $a=preg_replace($p,”,’jb51.net’); $b=preg_replace($p,”,”ЕСТЬ”); $c=preg_replace($p,”,”ЛЮБЛЮ”); $d=preg_replace($p,”,”ТЫ”);

$preg_m === $a.$b.$c.$d; *///Вывод [jb51. Сеть] ?>

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

Функция выполнения регулярного сопоставления PHP Регулярная замена PHP может использовать модификатор e, представляющий Eval (), для выполнения функции после сопоставления.

Согласно приведенному выше коду, хотя соответствующая функция strtolower() заключена в кавычки, она все равно будет выполняться eval().

Регулярная замена переменной соответствия обратная ссылка

Если вы знакомы с JavaScript, обязательно проверьте, знакомы ли обратные ссылки $1 $2 $3, и их также можно использовать в качестве параметров обратной ссылки в PHP. В PHP вы также можете использовать \ 1 \ \ 1 для представления обратной ссылки.

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

echo preg_replace(‘/.+(http\:[\w\-\/\.]+\/)[^\w\-\!]+([\w\-\!]+).+/’,’$1′,$weigeti); echo preg_replace(‘/.+(http\:[\w\-\/\.]+\/)[^\w\-\!]+([\w\-\!]+).+/’,’\1′,$weigeti); echo preg_replace(‘/.+(http\:[\w\-\/\.]+\/)[^\w\-\!]+([\w\-\!]+).+/’,’\\1′,$weigeti);//Все вышеперечисленные три являются выходными данными [//www.jb51.net ]

echo preg_ Заменить (‘/^ (. +) веб-сайт: (HTTP \: [\ w \ – \/\.] + \/) [^ \ w \ – \!] + ([\ w \ – \!] +). + $/’, ‘столбец: $1 < br > веб-сайт: $2 < br > торговая марка: $3’, $weigeti);/* Столбец: Веб-сайт онлайн-учебника школы W3C://www.jb51.net Торговая марка: jbzj! */

//Скобки в скобках, внешние скобки считаются первыми echo preg_ Заменить (‘/^ ((. +) веб-сайт: (HTTP \: [\ w \ – \/\.] + \/) [^ \ w \ – \!] + ([\ w \ – \!] +) $/’,’оригинал: $1 < br > столбец: $2 < br > веб-сайт: $3 < br > торговая марка: $4 ‘, $weigeti);/* Оригинал: Веб-сайт онлайн-учебника школы W3C://www.jb51.net , ты Джей Би Джей? Колонка: Веб-сайт онлайн-учебника W3Cschool://www.jb51.net Торговая марка: jbzj! */?>