2010-09-29 5 views
1
"artistName":"Travie McCoy", "collectionName":"Billionaire (feat. Bruno Mars) - Single", "trackName":"Billionaire (feat. Bruno Mars)", 

я хочу, чтобы получить имя артиста так Travie McCoy внутри этого кода с использованием регулярных выражений, пожалуйста, не я использую regexkitlite для iPhone SDK, если это изменяет вещи.регулярное выражение, чтобы получить строку в 2 строки

Благодаря

+0

Я уверен, что есть парсер, что [(например, это один, например?)] (Http://code.google.com/p/json- фреймворк/). Вы не хотите делать это с помощью регулярного выражения. – Tomalak

+1

Я бы предпочел regex, если честно, я пытаюсь его изучить – user393273

+3

@user: Это может быть так, но это действительно плохой случай для регулярного выражения. Всякий раз, когда вложенные структуры (и да, CSV или JSON - вложенные структуры) нуждаются в разборе, используйте парсер. Regex не может справиться с вложенными структурами. Вы можете приблизиться, но вы никогда не накрываете 100%. - * Неизбежно, кто-то придет и предоставит регулярный ответ, который будет работать. За исключением случаев в углу. Это, конечно, никогда не произойдет. За исключением случаев, когда они это делают. Используйте свою собственную опасность. ; -) * – Tomalak

ответ

2

"?artistName"?\s*:\s*"([^"]*)("|$) должен сделать трюк. Он даже обрабатывает некоторые изменения в строке:

  • Пустое пространство до и после :
  • artistName с и без кавычек
  • отсутствующими " в конце имени исполнителя, если это последнее, что строка

Но будет намного больше вариантов ввода, с которым вы можете столкнуться, что это регулярное выражение не будет совпадать.

Также вы не хотите использовать регулярное выражение для соответствия этому по соображениям производительности. Сейчас вас может заинтересовать только поле artistName. Но через некоторое время вам понадобится информация из других полей. Если вы просто измените имя поля в регулярном выражении, вам придется снова сопоставить всю строку. Гораздо лучше использовать парсер и преобразовать всю строку в словарь, где вы можете легко получить доступ к различным полям. Анализ всей строки не должен занимать гораздо больше времени, чем сопоставление последней пары ключ/значение с использованием регулярного выражения.

Это похоже на какой-то JSON, есть много хороших и полных парсеров. Однако нетрудно написать один. Вы можете написать простой recursive descent parser через пару часов. Я думаю, что это то, что каждый программист должен был сделать хотя бы один раз.

+1

Спасибо за это, я работал, и я написал свой собственный XML-парсер. но я просто не мог быть связан с этим – user393273

+1

Awesome man thanks :), и да, я написал свой собственный синтаксический анализатор, я сделал xml, который я ненавижу nsxmlparser :) – user393273

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