2016-12-28 2 views
3

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

static let Regex_studio_tel = "^(0[0-9]{2,3}\-)?([2-9][0-9]{6,7})+(\-[0-9]{1,4})?$" 

Но приходит вопрос:

Неверная последовательность выхода в буквальном

картины, которую я фишка :

enter image description here


Edit -1

Мое требование сочетать специальные номера плоскости использовать Regex, такие как:

Моя компания имеет специальный номер самолета:

028-65636688 or 85317778-8007 

// aaa-bbbbbbbb-ccc мы знаем, что aaa является префиксом, а это означает код города, и bbbbbbbb является основным номером телефона, cccc является дополнительным номером стационарного телефона,

, например, стационарный телефон моей компании: 028-65636688, возможно, наша компания имеет 10 внутренних номеров: 028-65636688-8007 ,028-65636688-8006,028-65636688-8005 и так далее. Конечно, у него может быть номер ext в конце.

028-65636688-2559 
+1

TRY: static let Regex_studio_tel = "^ (0 [0-9] {2,3} '\' -)? ([2-9] [0-9] {6,7}) + ('\ «- [0-9] {1,4})?$ " –

+0

Возможно, вам понадобится еще несколько примеров, чтобы прояснить ваше требование.' 65636688' недействителен, ни '028-65636688-85317778-8007' - нет, ОК? – OOPer

ответ

7

Две последовательности символов \- не является допустимым последовательность выхода в Swift String. Когда вам нужно передать \- в NSRegularExpression в качестве шаблона, вам необходимо написать \\- в Swift String.

Итак, ваша линия должна быть что-то вроде этого:

static let Regex_studio_tel = "^(0[0-9]{2,3}\\-)?([2-9][0-9]{6,7})+(\\-[0-9]{1,4})?$" 

Сложение

Как отметил Роб, знак минус не специальный символ в регулярных выражениях, когда появляются за пределами [] , поэтому вы можете написать это как:

static let Regex_studio_tel = "^(0[0-9]{2,3}-)?([2-9][0-9]{6,7})+(-[0-9]{1,4})?$" 
+0

@Rob, я задавался вопросом, следует ли мне это отметить, но это Кажется, я должен. – OOPer

0

Я предполагаю, что ваше намерение состояло в том, чтобы избежать символов -. Но это необязательно (и неверно). Если ваша цель в том, чтобы соответствовать только тире, вы должны удалить эти обратные косые черты полностью:

let pattern = "^(0[0-9]{2,3}-)?([2-9][0-9]{6,7})+(-[0-9]{1,4})?$" 

Unrelated, но я с подозрением отношусь к этому + характер. Вы действительно имели в виду, что вы хотели сопоставить одно или несколько вхождений [2-9][0-9]{6,7}? Или вы хотите точно соответствовать одному событию?

+0

спасибо, я хочу, чтобы соответствовать номеру стационарной линии, и я опубликовал, что не доступен в swift, в соответствии со всеми номерами стационарных телефонов, также будет рассмотрен '+'? – aircraft

+0

Я не знаю, в каком формате эти номера стационарного телефона вы но я уверен, что это не несколько последовательностей '[2-9] [0-0] {6,7}'. Например, ваше регулярное выражение будет соответствовать последовательности числа 9, повторяемой 700 раз Я не могу поверить, что это то, что вы намеревались. Возможно, вы можете отредактировать свой вопрос и показать нам фактические примеры всех типов строк, которые вы хотите сопоставить. – Rob

+0

@aircraft - Хорошо, я вижу, что вы обновили свой вопрос. вы пытаетесь сопоставить полный список номеров, разделенных запятыми, или вы хотите регулярное выражение, которое можно использовать для повторения чисел внутри этой более широкой строки? – Rob