Настоящее регулярное выражение - (([A-Za-z\s])+)\?
. Это соответствует одному или нескольким буквам и пробельным символам, за которыми следует знак вопроса. Здесь \
имеет два разных значения. В первом случае \s
имеет фиксированное значение и обозначает любые символы пробела. Во втором случае \?
означает буквенный знак вопроса. Выделение необходимо, так как знак вопроса означает одно или ни одно из предыдущих в противном случае.
Вы не можете набирать ваше регулярное выражение, как это, в строковом литерале в коде C. C также выполняет некоторое экранирование с использованием символа обратной косой черты. Например, "\n"
переводится в строку, содержащую только символ новой строки. Существуют и другие escape-последовательности со специальными значениями. Если символ после обратной косой черты не имеет особого значения, обратная косая черта просто удаляется. Это означает, что если вы хотите иметь одно backspace в своей строке, вам нужно написать два.
Итак, если вы написали свою строку регулярных выражений, как хотите, вы получите разные результаты, так как она будет интерпретирована как (([A-Za-zs])+)?
, которая имеет совершенно другое значение. Поэтому, когда вы пишете регулярное выражение в строковом литерале ObjC (или любом другом языке C), вы должны удвоить все символы обратной косой черты.
извините, что это (([A-Za-z \\ s]) +) \\? – bigCan