2015-12-08 1 views
-1

Я хотел бы создать регулярное выражение для кода доступа, где пользователи означают их число, - это код доступа со словами и двойной двоеточием перед кодом или хэшем после слова. Поэтому я хотел бы оба быть приняты следующие:Как создать регулярное выражение с одним условием ИЛИ, которое проверяет начало и конец шаблона?

code: 1234567 
123567# 

Однако, как «#» и «код:» находятся на противоположных концах образца мой текущий способ сделать это повторяется все мое регулярное выражение в два раза следующим образом.

(?:(?:code|pc|#|participant)[:>]?#?(\\d{7,8}(?!\\d)))|((?<!\\d)\\d{7,8})# 

Я по сути говоря префиксов слова + код доступа ИЛИ код доступа + #

Когда я хотел бы сказать префиксов слова или хэш в конце + код доступа. Возможно ли последнее?

ответ

0

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

extension String { 
    func beginsWith (str: String) -> Bool { 
     if let range = self.rangeOfString(str) { 
      return range.startIndex == self.startIndex 
     } 
     return false 
    } 

    func endsWith (str: String) -> Bool { 
     if let range = self.rangeOfString(str, options:NSStringCompareOptions.BackwardsSearch) { 
      return range.endIndex == self.endIndex 
     } 
     return false 
    } 
} 

А потом:

if(codeString.beginsWith("code:") || codeString.endsWith("#") 
    //Something 
+0

Какая из манипуляций со строками и регулярное выражение является более эффективным и как будет факторы, такие как увеличение количества слов, которые мы ищем, влияют на эффективность? – Deco

+0

@Deco regex отлично подходит для сложного шаблона, который вы не задали здесь. Плюс: Idk о swift, но во многих языках управление строкой выполняется быстрее, чем регулярное выражение, поскольку ваше семя растет –

+0

Я сделаю некоторое тестирование на них обоих. Я слышал, что в большинстве случаев управление строкой выполняется быстрее, но факт, что регулярное выражение имеет все значения сразу, заставляет меня думать, что просто нужно пройти через строку, проверяющую первую букву каждой строки в отрицательном образе. Строковая манипуляция должна проходить через строку N количество раз, где N - количество значений, которые я подаю в функцию beginWith. – Deco

Смежные вопросы