2013-02-19 2 views
0

Я хочу создать правило для удаления array( и ) из этого текста:Поиск с регулярным выражением в Sublime Text 2

"price"=>  array(129), 

получить:

"price"=>  129, 

Я попытался это выражение без успеха:

(?<="price"=>\s*)array\((?=\d*)\)(?=,) 

Затем я решил сделать замену в 2 этапа. Во-первых, я снял array(:

(?<="price"=>\s\s\s\s\s)array\(

И получил:

"price"=>  129), 

Так что мне пришлось удалить только закрывающую скобку ). Я пытался без успеха:

(?<="price"=>\s*\d*)\)(?=,) 

Это работает, но только для известного числа непечатаемых и цифр:

(?<="price"=>\s\s\s\s\s\d\d\d)\)(?=,) 
+0

почему бы вам не начать использовать \ S + и \ d + ...? – vault

+0

@vault, '(? <="price"=> \ s + \ d +) \) (? =,)' Тоже не работает. –

+0

уверен, что только больно видеть, что кто-то пишет \ s \ s \ s \ s \ s \ s \ s \ s – vault

ответ

2

Попробуйте это за находку:

("price"=>\s+)array\((\d+)\)

и это для замены:

\1\2

+0

'\ s +' должен быть заменен на '\ s *', если не гарантируется наличие пробелов – JamieJag

+0

Большое спасибо! Оно работает. –

+0

Добро пожаловать! – JamieJag

1

вы можете сопоставить всю строку с этим

\"price"[^a)]+(array\()\d+(\),) 

содержит один группа для "array (" и другая для "),"

+1

Спасибо за Ваш ответ. Однако Sublime выбирает всю строку, и я должен сделать замену в выборе, чтобы получить '" price "=> 129,'. Это не очень полезно, если есть много файлов для выполнения этой операции. –

1

Попробуйте следующее:

Регулярное выражение состоит в основном из двух частей (труба посередине является символом чередования, что означает, что если первая часть не соответствует ей, она должна искать вторую часть).

Первые проверки деталей, если массив ( предшествует "цена" => ... и по преуспели) с помощью look-behind(? < = ...) и look-ahead(? = ...) символ соответственно.

(?:(?<=\"price\"=>\s*)array\((?=\d+\))) 

Тогда мы имеем трубу (описано выше) ..

| 

Вторая проверка часть если ) предшествует всем, что мы соответствовали ранее («цена» => массив (129) также используют look-behind символ (< = ...):

(?<=\"price\"=>\s*array\(\d+)\) 

Таким образом, для строки «цена» => массив (129), результат должен быть два матча: массив ( и ).

Пожалуйста, дайте мне знать, если это сработает для вас.

+0

Спасибо за ваш ответ. Однако Sublime выбирает всю строку, и я должен сделать замену в выборе, чтобы получить '" price "=> 129,'. Это не очень полезно, если есть много файлов для выполнения этой операции. –

+0

Я раньше не использовал Sublimetext. Выполняете ли вы действие «Найти и заменить» с помощью регулярного выражения? – kjetilh

+0

В Sublime Text Я могу выбрать текст внутри HTML-тегов (или любого другого patter), как показано в этом примере [http://www.evernote.com/shard/s2/sh/69d3c95a-5e16-44ab-b43e-1bb76db221e6/4c86a1ac0b3d36c129f7640f7b44dbf9) и удалить/заменить его. –