2016-02-05 2 views
2

как я могу заменить пробелы между двумя знаками доллара?regex заменить пробелы между знаками доллара

с этим регулярное выражение все работает нормально, я могу удалить пробелы между R и R.

\ с (?! [^ \ R] * (\ R | $)) the result

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

\ s | result with dollar sign

EDIT ([^ \ $] * (\ $ $)?!): Язык программирования: PHP

+1

Вы можете попробовать '\ s + (? = [^ $] * \ $ [^ $] * $)' [Как это] (https://regex101.com/r/cA2aB6/1), если возможно только есть одна пара долларов в строке. Иначе вам нужно проверить всю строку за то, что она находится внутри сбалансированных значков доллара, чем-то вроде этого регулярного выражения (https://regex101.com/r/gL4nI9/1) '\ s + (?! (?: (?: [^ $] * \ $) {2}) * [^ $] * $) ' –

+2

Я хочу встретиться с этим человеком, который опустошает все вопросы регулярного выражения, не прочитав полный вопрос. Я понимаю, это мой первый день здесь, но это не значит, что я не имею понятия использовать эту платформу. Я здесь около 6 лет .. Это действительно необоснованно! – clyz

+1

Спасибо bobble bubble, это отлично! – clyz

ответ

1

\s+(?!(?:(?:[^$]*\$){2})*[^$]*$) модель предлагается в одном из комментарии связаны с большим отрывом, но очень неэффективны и могут даже вызвать замораживание программы.

Вот как я хотел бы сделать это в PHP (заменяя пространство между $ символов с дефисом):

$re = '~\$[^$]+\$~'; 
$str = "\$ words words \$ \$ words words \$ \$ words words \$ \$ words words \$"; 
$result = preg_replace_callback($re, function($m) { 
    return str_replace(" ", "-", $m[0]); 
}, $str); 
echo $result; 

См IDEONE demo

С \$[^$]+\$ рисунком, мы сопоставляем целые подстроки между двумя доллара, а внутри preg_replace_callback мы можем дополнительно управлять заменой, применяя str_replace ко всем совпадениям.

+0

Вы правы, этот путь кажется лучше. Я отмечаю это как ответ. Спасибо вам за помощь! – clyz

+0

Привет @Wiktor Stribiżew, у меня есть еще один вопрос, можете ли вы рассказать мне, как я это делаю: я хочу поместить некоторую строку в начало первого знака $ и некоторую строку до конца другого знака $. Это возможно? Например: «$ words words $» to «$ -words-words- $« – clyz

+1

Как ['return" ".str_replace (" "," - ", $ m [0]). ""; '] (http://ideone.com/SOsxVM)? –

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