Заменить все нижние подчеркивания на 1 подчеркиванием с помощью регулярного выражения? - PullRequest
0 голосов
/ 20 апреля 2011

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

$p__________________________________________________________________________________________________________________________________________, &$s___________________________________________________________________________________________________________________________________________, &$k____________________________________________________________________________________________________________________________________________, &$nft_____________________________________________________________________________________________________________________________________________)

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

$p_, &$s_, &$k_, &$nft_)

Что в основном удаляет все (поэтому их нет определенного количества, кроме их 1) идущих подчеркиваний и заменяет их на 1 подчеркивание.

Я пробовал следующий шаблон, но не повезло:

preg_replace('#(\$[a-z]{1,3})[_]+#', '$1', $string);

PS: причина, по которой preg_replace (regex) является предпочтительным (хотя я понимаю, что это не всегда правильно на 100%), потому что это более точно, чем использование обычной функции замены строк.

Спасибо и ценим всю помощь.

Ответы [ 3 ]

5 голосов
/ 20 апреля 2011
preg_replace('/_+/', '_', $string);

подумал о чем-то настолько простом, что вы получите лучшую производительность от str_replace () .

0 голосов
/ 21 апреля 2011

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

Если вам нужен якорь -

\ $ букв якорь: #(\$[a-z]{1,3}_)_+# с $1

Буквенный якорь: #([a-z]_)_+# с $1

Любой якорь: #((?:^|[^_])_)_+# с $1

0 голосов
/ 20 апреля 2011

вы можете попробовать заменить _ пробелом, используя 'str_replace', а затем обрезать их с правой стороныи затем добавьте _ в конце строки.Я не знаю прямой путь извините!IMO это быстрее, чем регулярное выражение

...