2009-10-15 3 views
0

Привет Я ищу в письменном виде регулярное выражение, которое будет соответствовать следующимКак совместить название книги и isbn с регулярным выражением?

/book/The-title-of-the-book/0000000000/ 

где The-title-of-the-book является любой алфавитно-цифровой символ и «-», 0000000000000 является 10 или 13 цифр ISBN книги, например, /book/To-kill-a-mockingbird/0099419785/.

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

+0

Регулярное выражение, для которого язык? – msparer

+0

Что вы хотите совместить? Вы хотите извлечь название и ISBN? – 2009-10-15 10:14:58

ответ

0

Try:

/book/([a-zA-Z\d-]+)/(\d{10}|\d{13})/ 

Обратите внимание, что в некоторых языках / используется для определения границ регулярного выражения, в этом случае вы» должен буду бежать / в нем:

/\/book\/([a-zA-Z\d-]+)\/(\d{10}|\d{13})\// 

Или использовать другой разделитель, если это возможно.

Книга будет захвачена в группе 1, в группе ISBN 2.

+1

, который будет соответствовать от 10 до 13 цифр, ему нужно либо 10, либо 13. isbn не может быть 11 или 12 – SilentGhost

+0

Вы абсолютно правы. –

0

В этом случае я бы не использовать регулярные выражения и просто разделить строку на/в последней части является ISBN и вторым длиться заглавие.

Я хотел бы сослаться на комментарий

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

от Jaime Завински

0
/^\/book\/[a-zA-Z0-9-]+\/\d{10,13}\/$/ 

Не тестировался, но я считаю, что должно соответствовать тому, что вы хотите.

EDIT: Это должно сделать так, чтобы ISBN был либо 10, либо 13 символами, а не между ними.

/^\/book\/[a-zA-Z0-9-]+\/(\d{10}|\d{13})\/$/ 
+0

См. Предыдущий комментарий SilentGhost в моем ответе: * ", который будет соответствовать от 10 до 13 цифр, ему нужно либо 10, либо 13. isbn не может быть 11 или 12" *. –

+0

Правда.Будет редактировать, чтобы включить OR. – n00dle

0

В Python вы colud использование:

^/book/([a-zA-Z0-9-]+)/(\d{10,13})/$ 
+1

См. Предыдущий комментарий SilentGhost в моем ответе: «Это будет соответствовать от 10 до 13 цифр, ему нужно либо 10, либо 13. isbn не может быть 11 или 12». –

+0

Вы правы. – 2009-10-15 12:36:57

3
/^\/book\/([a-zA-Z0-9\-]+)\/(\d{10}|\d{13})\/$/ 

также вам не нужно ^ и $, если вы хотите искать текст для этой строки

0
/book/[a-zA-Z0-9-]+/([0-9]{10}|[0-9]{13})/ 

Это делает точно, что вы хотите

  • [a-zA-Z0-9 -] +: Тесты для одного или нескольких буквенно-цифровых символов
  • ([0-9] {10} | [0-9] {13}): Тесты на 10 цифр или 13 цифр
Смежные вопросы