2015-01-15 3 views
-3

У меня есть строка с необязательным (someVal) 'в ней. Я хочу, чтобы регулярное выражение находило и заменяло все вхождения этого ключевого слова и заменяло в нем только внутренние значения. Что я делаю это ...Удалить необязательный() из строки Swift с использованием регулярных выражений

query = "Insert Into table (Col, Col, Col, Col, Col, Col4, Col4, Col4, Col, AuditStatusId, Col, Col, Col, Col, Col, Col, Col, Col, Col, Col, Col, Col, Col, Col, Col, Col, Col, Col, Col, Col) Values ('71E3F86A059A40F0B3F7614E08ACD2B9', 1, Optional(4), Optional(6), ' ', '', Optional(40799), 'NULL', NULL, 1, 1, NULL, NULL, NUll, 0, NULL, 1, '', NULL , NULL, 90.0, 100.0, 70.0, 89.99, 0.0, 69.99, 1, 1, '2015-01-15 14:09:34 +0000', 0)" 

и замена с использованием регулярных выражений,

query = query.stringByReplacingOccurrencesOfString("(\\Optional(w+))", withString: "$1", options: NSStringCompareOptions.RegularExpressionSearch, range: Range<String.Index> (start: query.startIndex, end: query.endIndex)) 

Но это не работает даже в Objective C. Кто-нибудь имеет представление, как это сделать ??

EDIT: Я пытался преодолеть это разворачивание ценности, но это не придумали решение, что я ищу. Мне нужно сохранить значения как «nil» в случае, если значение value и use внутри «Необязательный (val)» в значении значения введено. Поэтому, пожалуйста, избегайте предлагать Unwrapping для значений.

+6

То есть, скорее всего, неправильный подход. Вы должны развернуть опции * до * создания строки запроса. –

+2

И я надеюсь, что вы используете подготовленные заявления!? (http://xkcd.com/327/) –

+0

Я использую '!' вместо '?' и если значение равно нулю. Он записывает нуль, который я заменяю NULL. Более того, если значения равны 20, вы имеете в виду поставить 20 if's. Разве это не может быть неправильным? – Saad

ответ

2

Я нашел ответ на себя. Поскольку все ваши комментарии и ответы показывали только разворачивающиеся значения, но если у меня есть 30 столбцов, тогда мне придется поставить 30 чеков или 30 операторов с параметром «1». "НОЛЬ". В то время как я могу просто заменить nil с NULL и Optional(value) с value одним оператором регулярного выражения, как:

в Swift:

query = query.stringByReplacingOccurrencesOfString("\\Optional[(](\\w+)[)]", withString: "$1", options: NSStringCompareOptions.RegularExpressionSearch, range: Range<String.Index> (start: query.startIndex, end: query.endIndex)) 

и в объективном C:

query = [query stringByReplacingOccurrencesOfString:@"\\Optional[(](\\w+)[)]" 
             withString:@"222" 
              options:NSRegularExpressionSearch 
               range:NSMakeRange(0, [query length])]; 
5

Я знаю, что не отвечаю на ваш первоначальный вопрос, но ваш подход способствует плохой практике. Лучше развернуть значения, прежде чем вставлять их в запрос. Например,

var optional1: Int? = 10 
var optional2: Int? 

optional1?.description ?? "NULL" // "10" 
optional2?.description ?? "NULL" // "NULL"