Можно ли использовать £ в качестве разделителя в preg_replace? - PullRequest
4 голосов
/ 06 марта 2011

Я конвертирую функцию eregi_replace, которую я нашел, в preg_replace, но в строке eregi есть все символы клавиатуры.Поэтому я попытался использовать £ в качестве разделителя ... и он работает в настоящее время, но мне интересно, может ли это вызвать проблемы, потому что это нестандартный символ?1004 *

и прег:

function makeLinks($text) {
    $text = preg_replace('£(((f|ht){1}tp://)[-a-zA-^Z0-9@:%_\+.~#?&//=]+)£i',
    '<a href="\\1">\\1</a>', $text);
    $text = preg_replace('£([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)£i',
    '\\1<a href="http://\\2">\\2</a>', $text);

        return $text;
}

Ответы [ 5 ]

4 голосов
/ 06 марта 2011

£ проблематично, потому что это не символ ASCII.Он из кодировки Latin-1 и будет работать, только если ваш PHP-скрипт также использует 8-битное представление.Если ваш файл закодирован как UTF-8, то £ будет представлен в виде двух байтов.И PCRE в PHP отключится.(По крайней мере, моя версия делает.)

4 голосов
/ 06 марта 2011

Вы можете использовать скобки для ограничения регулярного выражения, а не одного символа, например:

preg_replace('(abc/def#ghi)i', ...);

Это, вероятно, было бы лучше, чем пытаться найти неясный символ, который (пока) не является частью вашего выражения.

2 голосов
/ 06 марта 2011

Как указывал @Chris, вы можете использовать парные символы скобок в качестве разделителей, но они должны быть правильно сбалансированы по всему регулярному выражению.Например, '<<>' не будет работать, но '<<>>' будет.Вы можете использовать любой из (), [], {} или <>, но я рекомендую скобки или квадратные скобки;круглые скобки слишком часто встречаются в регулярных выражениях, а угловые скобки используются в escape-последовательностях, таких как (?>...) (атомная группа) и (?<=...) (lookbehind).

Но я с @Brad в этом: почему быпросто экранировать символ-разделитель с помощью обратной косой черты всякий раз, когда он появляется в регулярном выражении?

2 голосов
/ 06 марта 2011

Вы можете использовать символ Unicode, просто чтобы быть уверенным.

\u00A3

Следите за функциями ereg и поддержкой Unicode.

http://www.regular -expressions.info/php.html
http://www.regular -expressions.info / characters.html

Да здравствует Королева.

1 голос
/ 06 марта 2011

Вы бы знали, что данные анализируются лучше, чем мы. Что касается регулярных выражений, то оно ничем не отличается от любого другого значения ASCII.

Хотя я должен спросить: что не так с традиционным, тогда просто избегать его? Или используя класс с диапазоном символов?

...