Я не могу понять, что соответствует этому regex
:
A: "\\/\\/c\\/(\\d*)"
B: "\\/\\/(\\d*)"
Я предполагаю, что они соответствуют какой-то числовой последовательности, поскольку \d
соответствует любой цифре, но я хотел бы знать пример строки, которая соответствовала бы этому regex
.
Синтаксис шаблона указан в ICU
. Выражения создаются с помощью NSRegularExpression
a> в приложении для iOS и верны.
4 ответа
Первое соответствует //c/
+ 0 или более цифр. Второй соответствует //
+ 0 или более цифр. В обоих фиксируются цифры.
- Пример соответствия для A):
//c/123
- Пример соответствия для B):
//12345
Когда я использую Cygwin, который имитирует Bash в Windows, я иногда сталкиваюсь с ситуациями, когда мне нужно избегать escape-символов, что, по моему мнению, делает это выражение таким странным. Например, когда я использую sed для поиска одного '\', мне иногда приходится писать его как '\\\\'. (Забавно, StackOverflow подтвердил мою точку зрения. Если вы напишете 4 обратных косых черты в комментарии, он покажет только два. Так что, если вы обработаете его снова, все они могут исчезнуть в зависимости от вашей ситуации).
Учитывая это, было бы полезно думать о парах обратных косых черт как о представляющих только одну, если вы пришли из аналогичной ситуации. Я думаю, что это так. Из-за этого я бы сказал, что Эрик Дуймелинк, вероятно, на высоте. Это захватит последовательность цифр, которая может следовать или не следовать за парой косых черт и c:
// c / 000
// 00000
Это регулярное выражение соответствует нечетной последовательности символов, что на первый взгляд почти похоже на регулярное выражение, поскольку \d
- это цифра, а за которой следует звездочка (\d*
), будет означать ноль или более цифры. Но это не цифра, потому что escape-косая черта экранирована.
\\/\\/c\\/(\\d*)
Так, например, этот соответствует следующему тексту:
\/\/c\/\
\/\/c\/\d
\/\/c\/\dd
\/\/c\/\ddd
\/\/c\/\dddd
\/\/c\/\ddddd
\/\/c\/\dddddd
...
Этот почти такой же
\\/\\/(\\d*)
За исключением того, что вы просто удалите c\/
из результатов выше:
\/\/\
\/\/\d
\/\/\dd
\/\/\ddd
\/\/\dddd
\/\/\ddddd
\/\/\dddddd
...
В обоих случаях последний \
и необязательный d
- это [группа захвата] [1].
Мое первое впечатление было, что эти регулярные выражения предназначены для экранирования в строках Java, а это означает, что они будут полностью недействительными. Если были экранированы для строк Java, таких как
Pattern p = Pattern.compile("\\/\\/c\\/(\\d*)");
Это было бы недопустимо, потому что после отмены экранирования это приведет к недопустимому регулярному выражению:
\/\/c\/(\d*)
Одиночные escape-символы (\
) недопустимы. Но \d
действителен, так как он будет означать любую цифру.
Но опять же, я не думаю, что они недействительны, и они не экранированы для строки Java. Они просто странные.
Pattern p = Pattern.compile("\\/\\/c\\/(\\d*)");
?
"Find '{44}' <- this literal"
; $str_regex = "\\("
+ str1 + "\\)"
;
Похожие вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.
\/\/c\/
, за которым следует (\
, а затем ноль или более экземпляровd
) в виде группы. Второй такой же, за исключением того, что он соответствует\/\/
вместо\/\/c\/
.