2010-10-13 1 views
1

Эй, ребята, у меня есть несколько проблем с использованием PCRE, чтобы правильно составить формат прокси irc. Я плохо разбираюсь в PCRE, и мне бы понравились некоторые предложения от тех, кто использует PCRE/regex. :)выражение pcre для прозвищ irc?

настоящее время я использую это выражение: /^([^A-Za-z]{1})([^A-Za-z0-9-.]{0,32})$/ Я использую его в качестве такового: preg_replace($regex, $replaceWith, $content)

Я предположил, что это означало, начиная от передней до конца, любые символы, которые не являются AZ, аз , или 0-9 для первого символа, замените его. Любые символы после этого, в которых не A-Z a-z, 0-9, -, или., Заменить его.

Если кто-то может помочь, вы бы очень помогли. Это единственное, что мешает мне выпускать чат-продукт на новое программное обеспечение форума. :/

ответ

0

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

$regex = '/^[a-z][a-z0-9.-]{0,32}$/i'; 
if (!preg_match($regex, $content)) 
{ 
    // do your replace here 
} 

регулярное выражение говорит:

^     # Beginning of string 
    [a-z]    # Match a single a-z 
    [a-z0-9.-]{0,32} # Match between 0 and 32 occurances of a-z, 0-9, . or - 
$     # End of string 
/i     # Make the pattern case-insensitive 
+0

Я пытался заменить символ (ы), соответствующий «". Извините, забыл упомянуть об этом. Предоставленный, похоже, не работает, но я кое-что упустил: «# ([^ a-z0-9] {0,32}) # i" - он может не делать именно то, что мне нужно, m, используя substr(), чтобы непрерывно удалять первый символ (если это число), пока не будет буквой, символом или пустым. Если у вас есть другие предложения, дайте мне знать. И спасибо за ответ/помощь :) –

+0

Если вы просто хотите удалить недопустимые символы, используйте 'preg_replace ('/ [^ a-z0-9 .-] +/i', '', $ content)'. Вы не должны пытаться проверять * и * исправлять формат в той же операции. –

+0

Согласно [этому вопросу] (http://stackoverflow.com/questions/5163255/regular-expression-to-match-irc-nickname/5163309#5163309) набор символов, который у вас выше, слишком ограничен для псевдонимов IRC. – Phrogz

1

Я использовал следующее регулярное выражение для проверки прозвища в моих журналах IRC:

/<([a-zA-Z\[\]\\`_\^\{\|\}][a-zA-Z0-9\[\]\\`_\^\{\|\}-]{1,31})>/ 

, используя его в preg_match так:

preg_match('/<([a-zA-Z\[\]\\`_\^\{\|\}][a-zA-Z0-9\[\]\\`_\^\{\|\}-]{1,31})>/', $line) 

Я просто проверить, является ли пользователь сказал что-то на линии, и линия была не просто присоединиться/часть сообщения или изменить ник или что-то в этом роде , но было бы легко включить его в preg_replace.

Это соответствует ники в соответствии с правилами прозвища в RFC 2812 Section 2.3.1, которые утверждают, что первый символ должен быть буквой (a-zA-Z) или специальный ([]{}^`|_\) и остальные символы могут быть буквы, специальные, цифры (0-9) или дефисами (-). Я выбрал максимальную длину 32 на основе NICKLEN=32 GTAnet вместо максимальной длины RFC 9, потому что многие сети, похоже, не следуют этому стандарту. Максимальная длина зависит от разных сетей IRC, поэтому настраивайте их по мере необходимости.