如何将书名和isbn与正则表达式相匹配?

时间:2009-10-15 10:11:15

标签: regex

您好我正在研究编写一个与以下

匹配的正则表达式
/book/The-title-of-the-book/0000000000/

其中The-title-of-the-book是任何字母数字字符和' - ',0000000000000是图书的10或13位数字,例如/book/To-kill-a-mockingbird/0099419785/

你能建议我用什么模式来构建正则表达式

6 个答案:

答案 0 :(得分:3)

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

如果您要搜索此字符串的文字,也不需要^$

答案 1 :(得分:0)

尝试:

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

请注意,在某些语言中,/用于分隔正则表达式,在这种情况下,您需要转义其中的/

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

如果可能,请使用其他分隔符。

本书将在第1组中捕获,第2组是isbn。

答案 2 :(得分:0)

在这种情况下,我不会使用正则表达式,只是将字符串拆分为/最后一部分是ISBN,第二部分是标题。

我会参考评论

有些人在面对问题时会思考 “我知道,我会使用正则表达式。”现在他们有两个问题。

来自Jaime Zawinski的

答案 3 :(得分:0)

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

未经测试,但我认为应符合您的要求。

编辑:这应该使ISBN为10或13个字符,而不是介于两者之间。

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

答案 4 :(得分:0)

在Python中你可以使用:

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

答案 5 :(得分:0)

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

这完全符合您的要求

  • [a-zA-Z0-9 - ] +:测试一个或多个字母数字字符
  • ([0-9] {10} | [0-9] {13}):测试10位数或13位