ПРИМЕЧАНИЕ. Поведение изменилось в Xcode 6. Синтаксис \ 123 был заменен на $ 123.Также имейте в виду, что теперь новые строки могут быть сопоставлены в reg exps, поэтому убедитесь, что просматриваете их перед Replace-Alling
Добавление дополнительного аргумента в метод:
Для замены
[* setFoo:*]
с
[* setFoo:* bar:value]
вы делаете
(setFoo:)(.*)(\])
$1$2 bar:value]
(строка поиска и строка замены соответственно).
или, если на Xcode 5 или старше
(setFoo:)(.*)(\])
\1\2 bar:value]
(ниже используется новый синтаксис; поменяйте местами, если на Xcode 5 или старше)
ПРИМЕЧАНИЕ. Все написанное здесь относится к методам замены строк в NSString
/ NSMutableString
при использовании NSRegularExpressionSearch
!
Другими словами, эта строка:
[input replaceOccurrencesOfString:@"\n\\[([^\\]^\n]*)\\]\n"
withString:@"\n///\n\n[$1]\n"
options:NSRegularExpressionSearch
range:(NSRange){0,input.length}];
преобразует все "[...]\n"
последовательности (оставляя, например, "[...\n..."
в покое!) в "\n///\n\n[...]\n"
, сохраняя ...
с использованием $ 1.
Всегда делал это вручную, но в этом случае я добавлял ФАКУЛЬТАТИВНЫЙ флаг 'animate:', и по умолчанию до этого момента было ДА, но яхотел НЕТ, поэтому каждый вызов должен был обновляться.
Больше примеров:
Устаревшие методы (iOS)
dismissModalViewControllerAnimated:...
deprecation
Чтобы исправить устаревший dismissModalViewController
, заменив его пустым блоком завершения и сохранив анимированное значение:
(dismissModalViewControllerAnimated:)(.*)(\])
dismissViewControllerAnimated:$2 completion:nil]
presentModalViewController:animated:
deprecation
(presentModalViewController:)(.*)( animated:)(.*)(\])
presentViewController:$2$3$4 completion:nil]
Разное
PD ... Релиз → PD ... Уничтожить
Я недавно написал ac библиотеку с кучей файловс префиксом PD
, и я использовал Create / Release в качестве ключевых слов malloc / free, о чем я пожалел, так как это может заставить людей думать, что сохранение подсчета сохранено, поэтому я хотел переименовать PD<anything>Release(
с помощью PD<anything>Destroy(
.
([\n\r ])(PD)(.*)Release\(
$1$2$3Destroy(
Поскольку Core Graphics имеет CGPDFDocumentRelease
и аналогичные значения, я должен был обеспечить, чтобы слово начиналось также с PD.
PDAssert(
PDScannerPop...(...)
)
;
Я тупо поставил утверждения вокруг функционального кода, который станет пустым, когда! #Ifdef DEBUG.К счастью, я знал, что все это началось с PDAssert (PDScannerPop .... и закончилось с) ;.
(PDAssert\()(PDScannerPop)(.*)(\);)
$2$3;
Здесь нет $ 1, потому что это снова включит PDAssert(
.Обратите внимание, что я разделился сразу после PDAssert (и опускаю) в;в третьем фрагменте, который удаляет лишние парены из удаления PDAssert (.
Работа с конечными скобками
Вы можете сопоставить все, кроме ")"иметь дело с чрезмерно жадным регулярным выражением замен.Пример:
foo(replace(arg), bar)
foo(newvalue(newarg), bar)
Использование replace\((.*)\)
захватит replace(arg), bar)
, и результат будет foo(newvalue(newarg)
!Вместо этого используйте replace\(([^\)]*)\)
, который захватит replace(arg)
и оставит , bar)
в покое.
Преобразование набора свойств NSString из использования retain и / или strong (и любого другого) в использованиеcopy
@property \(([^\)]*)[sr][te][rt][oa][ni][gn]([^\)]*)\)(.*)NSString(.*)
@property ($1copy$2)$3NSString$4
Странная вещь в центре совпадает как с "сильным", так и с "удержанием".