Как использовать NSScanner для сканирования в формате ^ [a-zA-Z _] [a-zA-Z0-9 _] * - PullRequest
4 голосов
/ 06 июля 2011

Я пытаюсь, чтобы мой сканер NSS попытался отсканировать следующее регулярное выражение: [a-zA-Z _] [a-zA-Z0-9 _] *, но у меня возникли трудности.

Я могу сначала попытаться прочитать a-Z_, затем попытаться добавить a-Z0-9 _.

Мне интересно, существует ли более простой / более эффективный способ сделать это.Пожалуйста, дайте мне знать, спасибо.


Разъяснение: я не пытаюсь выполнить регулярное выражение.Я просто пытаюсь прочитать строку, которая выглядит как приведенное выше регулярное выражение.Нечто похожее на переменные в стиле C.По сути, любое буквенно-цифровое слово, но не должно начинаться с цифры.


Уточнение 2: Я пытаюсь, чтобы сканер прочитал ([] указывает каждый маркер чтения): "test 3" as [test, 3] "test3" как [test3] "3test" как [3, test] "_3test" как [_3test] "_3 test" как [ 3, test] " 3 3test" как [, 3, 3, test] " 3 test3" as [_, 3, test3]

Ответы [ 2 ]

3 голосов
/ 06 июля 2011

Вам понадобятся два набора символов:

Используя их, вы сможете сопоставлять все буквы и цифры в Юникоде, а не только набор букв английского алфавита и цифр.Если вам действительно нужны только эти гораздо меньшие наборы, их достаточно легко построить с использованием characterSetWithCharactersInString: и / или characterSetWithRange:.Если вы используете последний метод, вам нужно создать NSMutableCharacterSet и union другой набор символов в нем.

Как только у вас есть набор символов, легко сканировать символытолько символы в наборе , а затем, если хотите, объединяет одну строку с другой .

1 голос
/ 06 июля 2011

Это зависит от того, что вы хотите сделать. Если вы хотите использовать регулярные выражения, я слышал об этой платформе: RegexKit

Вы можете с легкостью применять регулярные выражения через строки, массивы, dict и т. Д ...

...