2015-04-10 1 views
0

У меня есть некоторые проблемы, чтобы сделать регулярное выражение ....Заменить неправильно BBcode цвет регулярных выражений PHP

Я хотел бы заменить неправильный цвет BBcode по BBcode по умолчанию.

[color=#123456] => OK 
[color=#]  => KO 
[color=]   => KO 
[color=#1234567] => KO 
[color=#12345] => KO 

Я начал что-то делать, но я не понимаю, как делать несколько тестов в регулярном выражении и как матч только после = с дифферент смешайте

Для Exemple:

101regex

Большое спасибо за вашу помощь :)

+1

Пожалуйста, ваши регулярные выражения в вопросе, а не в ссылке – Machavity

+0

к сожалению, я новичок в stackoverfow. – sylvain

ответ

1

Вы должны соответствовать правильному цветовому узору и по умолчанию использовать цвет, если шаблон не сопоставляется.

$color = '[color=toto]'; 
$default_color = '[color=#123456]'; 
$correct_pattern = '/\[color=#\d{6}\]/'; 

if(!preg_match($correct_pattern, $color, $matches)) { 
    $color = $default_color; 
} 

echo $color; 

Этот код выведет

[color=#123456] 

Если вам нужно объяснение на РегВыр я могу это объяснить на комментарий

+0

BTW, если вам нужно использовать H цвета exa, а не только десятичные цвета, вам нужно будет заменить «\ d» в regExp на «[0-9A-F]» – Med

+0

прежде всего поблагодарить за вашу быстроту, к сожалению, я должен заменить сложный текст. Я не могу сопоставить один на каждый код bbcode. – sylvain

+0

Таким образом, вы можете использовать только regExp '/ \ [color = # \ d {6} \] /' или '/ \ [color = # [0-9A-F] {6} \] /' в зависимости от вашей потребности – Med

0

Я хотел бы завершить свой паттерн, включая случай гекса и/я аргумент для регулярных выражений, что делает шаблон:

$pattern = "/\[color=#[0-9a-f]{6}\]/i"; 

редактировать: @sylvain: «Я должен заменить сложный текст. Я не могу соответствовать одному за одну весь код BBcode»

Перейти к preg_replace тогда.

+0

Да, мне тоже интересно, может быть, «/ \ [color = # [0-9A-Fa-f] {6} \]/i" с буквой верхнего регистра тоже хорошо – Med

+0

Мне хотелось бы обратное: p, мне нужно чтобы заменить все неправильные bbcode и не соответствовать хорошему. – sylvain

+0

Используйте негативный внешний вид, затем: http://stackoverflow.com/questions/2637675/how-to-negate-the-whole-regex –

0

Арх .. Я видел двусмысленность мой вопрос .....

Я хотел бы, неправильно прочитать, матч в регулярном выражении. на самом деле все деталь KO будет заменить после = на # 000000

[color=#123456] => KO 
[color=#]  => matched 
[color=]   => matched 
[color=#1234567] => matched 
[color=#12345] => matched 
[color=lightgray] => matched 

 Смежные вопросы

  • Нет связанных вопросов^_^