Я преобразовал некоторые eregs в preg_matches, заменив начальные ^
и final $
на /
s (надеюсь, этого было достаточно), но у меня есть ereg_replace в той же функции, о которой я не уверен.
Это функция checkPostcode, которую можно найти здесь .
// Take account of the special BFPO c/o format $postcode = ereg_replace ('C\/O', 'c/o ', $postcode);
Если я изменю его на preg_replace, не изменяя регулярное выражение, он даст эту ошибку: Delimiter must not be alphanumeric or backslash
обратным слэшем
На самом деле я не уверен в правильности выражения регулярного выражения. Я не уверен, что мне нужно изменить, в то же время гарантируя, что шаблон все еще выполняет свою работу.
Во-первых, как упоминалось в другом месте, вы, вероятно, должны использовать str_replace (), а не регулярное выражение для простых случаев, подобных примеру вашего примера.
Теперь, быстрое объяснение регулярного выражения в PHP:
Как вы, очевидно, уже знаете, функции ereg_ * теперь устарели в PHP, и вместо этого вы должны использовать функции preg_ *.
Основное различие между двумя наборами функций – это тип регулярного выражения, которое они используют. Функции ereg используют регулярное выражение в стиле POSIX, в то время как функции preg используют регулярное выражение PERL. Разработчики PHP решили стандартизировать регулярное выражение в стиле PERL, поэтому функции ereg устарели.
Я упоминаю все это, потому что полезно понимать различия между двумя типами регулярных выражений при переходе от одного к другому.
По большей части они на самом деле очень похожи – наиболее распространенные коды регулярных выражений работают одинаково между ними. Например, ^
и $
одинаковы для обоих, обозначая якоря для начала и конца строки.
Там, где они сильно отличаются друг от друга, функции preg не поддерживают многословные классы символов, поддерживаемые ereg. Поэтому, если у вас есть какие-либо eregs, которые включают такие коды, как [:digit:]
или [:alpha:]
тогда у вас будет больше работы для их преобразования. Тем не менее, они все еще могут быть преобразованы.
Есть еще несколько различий между ними, но если вы не выполняете сложные выражения (и это не похоже на это), вы вряд ли столкнетесь с другими проблемами, конвертирующими эти два стиля.
Кроме того, одно большое различие заключается в том, что preg требует символа разделителя на каждом конце строки регулярного выражения, чтобы обозначить, что это регулярное выражение. (обычно это косая черта, но может быть почти любым символом, если на обоих концах он одинаковый). Это не то же самое, что и ^ и $, поэтому ваше замечание об их замене неверно; вам все равно нужны ^ и $, а также косые черты.
Поэтому: чтобы преобразовать код ereg следующим образом: '^xyz$'
, вы просто добавили бы косые черты, например: '/^xyz$/'
Надеюсь, это поможет.
[редактировать]
Просто быстро отредактируйте, чтобы дать вам дополнительный справочный материал:
Оба они находятся в моих постоянных закладках.
Я преобразовал некоторые eregs в preg_matches, заменив начальные ^ и final $ на / s
Вы не должны были их заменить. Вам, вероятно, нужны оба:
'/^.....$/'
Я не уверен, что мне нужно изменить
C\/O
но при этом не задумываясь о том, что шаблон все еще выполняет свою работу.
Обычно вы используете /
чтобы разграничить регулярное выражение, но в этом случае было бы неплохо выбрать какой-либо другой не-буквенно-цифровой символ, чтобы вам не пришлось скрывать косую черту.
'#C/O#'
Если у вас есть фиксированная строка, которую нужно заменить, почему бы вам не использовать простой str_replace
?
$postcode = str_replace('C/O', 'c/o ', $postcode);
<? $postcode = "test C/O"; echo ereg_replace ('C\/O', 'c/o ', $postcode); //test c/o echo preg_replace ('/c\/o/i', 'c/o ', $postcode); //test c/o ?>
если кто-то может добавить, почему, кто-то проголосует, так что я могу узнать об этом?