2013-05-31 4 views
1

Позвольте мне извиниться первым. Я борюсь с этим редактором SO в течение часа. Извините за паршивое форматирование.Regex positive lookbehind

Если у меня есть регулярное выражение, которое соответствует заданному входу, то я помещаю это регулярное выражение в положительную оболочку внешнего вида, не все равно будет соответствовать входу, которое оно сопоставляло раньше?

Например, этот вход:

(NSString*) 

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

\(\w*\*\) 

Я подтвердил это на gskinner.com. Когда я положил, что регулярное выражение на внешний вид-за обертку, как так

(?<=\(\w*\*\)).... 

с этим в качестве входных данных:

(NSString*)help 

Я не получаю слово помощь как возвращение.
Это заставляет меня думать, что я просто не понимаю концепцию взгляда. Я смотрел учебник по этой концепции, но я не понимаю, почему это не сработает. Если я хочу найти:

(NSString*) 

и вернуть следующее слово, как я могу это сделать?

+0

Спасибо за помощь. Вы очень близко. В конце look-behind wrapper мне нужно четыре периода, чтобы представить слово «help», и мне нужно двоеточие раньше (NSString *). Или просто удалите двоеточие из регулярного выражения –

+0

Правило большого пальца: коды кода (фрагменты с отступом с четырьмя пробелами) лучше, чем встроенный код (обратные ссылки). –

+0

Я пробовал 4 пробела снова и снова. Я поставил вопросы раньше с кодом, но по какой-то причине, тонита редактора не будет работать для меня. –

ответ

1

У вас есть пробел в качестве последнего символа внешнего вида, но ваш вход не имеет места перед «помощью». Кроме того, перед текстом ввода нет символа двоеточия, но ваш внешний вид требует его.

Удалите пробел и двоеточие:

(?<=\(\w*\*\))\w+ 

Заметьте, что многие регулярные выражения двигателей запретить переменную длину задом выглядеть, поэтому работа вокруг, чтобы ограничить the.number символов в слове некоторого большого числа, например, 99:

(?<=\(\w{1,99}\*\))\w+ 
+0

+1 для упоминания запрещающей информации переменной длины. – NeverHopeless

+0

@Bohemian -> Мне помогли в форматировании mu_is_to_short, и он оставил несколько символов. См. Мой комментарий выше. Не знаю, почему я не мог заставить форматирование работать самостоятельно. Я не знал, что не могу использовать внешний вид переменной длины. Эта часть информации спасла бы меня от разочарования. Спасибо за ответ и объяснение. –

+1

Я провел некоторое тестирование и выяснил, что сработало, используя предложение @ Bohemian в качестве отправной точки. (? <= \ (\ w {1,99} \ * \)) \ w + не работает, используя NSRegularExpression. (? <= \ (\ w {1,10} \ * \)) \ w + работает для слов между 1 и 10. Что относительно более длинных слов? Оказывается, если я повторю \ w {0,10} в регулярном выражении, это позволит совместить слова с шагом в 10 символов. Переключение на \ w {1,11} нарушает внешний вид. –