2012-06-11 2 views
1

Я использую RegEx для ответа на вызов API, но в настоящее время он слишком «жадный» и в конечном итоге соответствует всем типам ответов. Биты RegEx необходимы, поскольку фактические идентификаторы в ответе будут отличаться каждый раз.RegEx для буквенно-символьного символа 15 символов в JSON

регулярное выражение утверждение заключается в следующем:

{data:\[{"name":"Mat","~id":"(.*)"},{"name":"Laurie","~id":"(.*)"}\]},"something":true} 

Что соответствует этому правильный ответ:

{data:[{"name":"Mat","~id":"4fd5ec146fc2ee0fff234234"},{"name":"Laurie","~id":"4fd5ec146fc2ee0fff234227"}]},"something":true} 

, а также это неправильный ответ:

{data:[{"name":"Mat","~id":"4fd5ec146fc2ee0fff234234"},{"name":"Laurie","~id":"4fd5ec146fc2ee0fff234227"},{"name":"John","~id":"4fd5ec146fc2ee0fff234237"},{"name":"Paul","~id":"4fd5ec146fc2ee0fff234238"},{"name":"George","~id":"4fd5ec146fc2ee0fff234239"}]},"something":true} 

Второй (.*) не только совпадающий с идентификатором второго элемента, но он соответствует ID и всего остального нежелательных объектов.

Так что, я думаю, мне нужно сделать мой RegEx немного более строгим, когда дело доходит до полей ~id. Поскольку идентификаторы всегда будут содержать 24 шестнадцатеричных символа, я хотел бы заменить (.*) на что-то более подходящее.

  • Я пишу это в Go, и поэтому с помощью RegExp пакета Гоу.
  • И я использую http://regexpal.com/ для проверки RegEx
+0

Попробуйте добавить? в таких наборах: '(. *?)' – TylerH4

+0

Спасибо Тайлеру, но он все еще слишком жаден. –

+0

пытается использовать '\ S +'? или сделать что-то вроде этого: '[\ w \ d] +'? – gaussblurinc

ответ

3

Вы можете использовать [^"]*, [^"]{24} или [0-9a-fA-F]{24} вместо .* для ваших полей ID.

+0

Отличный материал, спасибо. –

3

. (dot) в регулярном выражении будет соответствовать чему-либо, поскольку точка в RegEx является специальным символом, который соответствует любому одиночному символу (исключение - символы новой строки).

Вы должны использовать эту RegEx, чтобы соответствовать всегда есть 24 шестнадцатеричных символов только:

^[A-Fa-f0-9]{24}$

Мир