Преобразовать строку в регэксп

Idalgo

Новичок
Преобразовать строку в регэксп

Приветствую, Уважаемые

Посоветуйте, каким образом сделать из строки регэксп следующего вида:
"Case" -> "[C|c][A|a][S|s][E|e]"

Заранее спасибо
 

MD

Guest
без uppercase, просто сказать выражению, что оно не case-sensitive

-~{}~ 29.07.05 14:42:

и без foreach тогда наверно :)
 

Idalgo

Новичок
наверное не поняли:
есть строка, произвольная
Нужно преобразовать таким образом, чтобы вместо каждой буквы (Х) было ее представление, как в регекспах ([X|x])
Цифры, пробелы и проч должны оставаться без изменений
 

MD

Guest
ну тогда как сказал Tor.
foraeach
uppercase + lowercase

либо регекспом умным пройтись по твоей строке.
 

SelenIT

IT-лунатик :)
Странный синтаксис регекспа, ИМХО. Где такие применяются? Эта "палочка" в символьном классе подозрительно напоминает хрестоматийную загадку про две буквы, сидевшие на трубе :)
 

Profic

just Profic (PHP5 BetaTeam)
1. в кватратных скобках не нужны |.
2. зачем ты это хочешь сделать?
ЗЫ. поддержка регистра в регулярках так же как и поддержка upper/lowercase зависят от локали.
 

MD

Guest
Idalgo
ну если заглянуть в мануал по [m]preg_replace[/m] там будет пример один ... про модификацию.
 

Idalgo

Новичок
Автор оригинала: Profic
1. в кватратных скобках не нужны |.
2. зачем ты это хочешь сделать?
ЗЫ. поддержка регистра в регулярках так же как и поддержка upper/lowercase зависят от локали.
1. Действительно, можно без |.
2. Нужно для одной проги, которая не понимает (?i)
 

Idalgo

Новичок
Типа так:
PHP:
function createRegexp($str) {
$rez = '';
for($i=0; $i<strlen($str); $i++) {
  $v = $str{$i};
  if (strtoupper($v)==strtolower($v)) {
    $rez .= $v;
  } else {
    $rez .= '['.strtoupper($v).strtolower($v).']';
  };  
};
return $rez;
};
 

MD

Guest
PHP:
$str = 'some text with aNy CASe, spaces    and numbers 102345';
print(preg_replace('/([A-Za-z])/e', '\'[\'.strtoupper(\'\\1\').strtolower(\'\\1\').\']\'', $str));
 

Nimous

Guest
MD
Хм. Странно.
Это работает.

[off]Может тогда значене из "кармана" можно и переменной присвоить?
Совсем недавно пытался - не получалось ничего.
Синтаксис странный - имя функци в строке.
[/off]
 

Idalgo

Новичок
Автор оригинала: MD
PHP:
$str = 'some text with aNy CASe, spaces    and numbers 102345';
print(preg_replace('/([A-Za-z])/e', '\'[\'.strtoupper(\'\\1\').strtolower(\'\\1\').\']\'', $str));
Спасибо - то что надо.
Если вместо [A-Za-z] поставить \w - будет ли ловить все символы, включая кириллицу?
 

MD

Guest
Nimous
мануал читай.

Idalgo
зависит от локали. тоже мануал читай.
 

SelenIT

IT-лунатик :)
Idalgo
Если не ошибаюсь, будет ловить все символы, включая цифры и _.
 

Idalgo

Новичок
Автор оригинала: SelenIT
Если не ошибаюсь, будет ловить все символы, включая цифры и _.
Да, так и есть. А как можно расширить диапазон?
Кроме A-Za-z умляуты всякие, кириллица - можно?
 
Сверху