2013-09-19 1 views
1

у меня есть трудное время, пытаясь расшифровать это выражение:правильныйExpressionWithPattern помощь. Я нашел, как расшифровать выражение

[[NSRegularExpression regularExpressionWithPattern:@"^([^:]+?):([^:]+?):([^:]+?):(.*)$" options:NSRegularExpressionCaseInsensitive error:nil] 

Любой из вас может помочь мне понять, что именно делает?

Я по-настоящему благодарю вашу помощь.

ответ

1

Это выражение принимает из четырех частей строки отделенной с тремя двоеточием, например

quick:brown:fox:jumps 

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

Выражение создает четыре группы захвата - по одному для каждого из разделенных двоеточиями элементов строки.

Поскольку не двоеточие класс символов [^:]+? всегда следует двоеточие, неохотно квантор может быть удален:

^([^:]+):([^:]+):([^:]+):(.*)$ 

способ сделать то же самое без регулярных выражений будет использовать componentsSeparatedByString: и проверки что вы получите ровно четыре компонента назад:

NSArray *parts = [str componentsSeparatedByString:@":"]; 
if (parts.length == 4) { 
    ... // We've got a good string 
} 
0

Ведущий ^ означает «начало линии». Конечный $ означает конец строки. Таким образом, вся строка должна соответствовать тому, что находится между ними.

Выражение [^:] означает «любой символ, кроме двоеточия». Вслед за +? это означает «один или несколько из них, но совпадающие как можно меньше».

.* означает «ноль или более любого символа».

Двоеточие вне паренов означают, что фактические двоеточия должны быть в строке в этой точке.

Пары используются для группировки.

В конце концов, вы строка должна быть в форме:

0 или больше других, чем толстой кишки, затем двоеточие, 0 или больше, кроме двоеточия символов, затем двоеточие, 0 или более символов, знаков кроме двоеточия, затем двоеточие, затем 0 или более символов любого вида.