具有字符限制、特定起始字符和终止符的字符串的正则表达式匹配
regex matching for string with character limit, specific start characters, and termination
我正在尝试提取 url 字符串的特定部分。一个简化的示例是在 url 中查找以 "who" 或 "what" 开头的任何字符串,总长度为 5 或 10 个字符,并停止匹配任何非字母数字字符串
例如:
http://www.test.com/who12/foo
-> who12
//5 个字符匹配以 who 开始并在 /
结束
http://www.test.com/who1234567/foo
-> who1234567
//10 个字符匹配,从 who 开始到 /
结束
http://www.test.com/what1
-> what1
//匹配字符串末尾的5个字符
http://www.test.com/what1?param=true
-> what1
//5 个字符匹配在 ?
处中断
我试过设置一些东西
here
它在 5 和 10 个字符的情况下在 / 上中断,但在 ?
情况下以及匹配位于字符串末尾的情况下失败。
是否有更简单的方法来完成此操作?
尝试使用以下正则表达式。
正则表达式: (?=.{5,10})(?:who|what)(?:[^\/?\s]*)
解释:
(?=.{5,10})
前瞻检查字符串的长度是否为 5 到 10 个字符。
(?:who|what)
匹配文字 who
或 what
.
[^\/?\s]*
是 /
、?
、\s (whitespace)
的否定字符 class。因此将匹配除这些之外的其他字符。
我建议使用
\.com\/\K(?:who[^\/?\s]{2}|what[^\/?\s])(?:[^\/?\s]{5})?
参见 this regex demo。
如果不支持 PCRE \K
匹配重置运算符,请使用捕获方法:
\.com\/((?:who[^\/?\s]{2}|what[^\/?\s])(?:[^\/?\s]{5})?)
详情:
\.com\/
- 匹配 .com/
以便为您需要的文本找到必要的左侧上下文
(?:who[^\/?\s]{2}|what[^\/?\s])(?:[^\/?\s]{5})?
- 两个备选方案和可选的 5 个字符后的任意一个:
who[^\/?\s]{2}
- who
后跟 /
、?
和空格 以外的 2 个字符
|
- 或
what[^\/?\s]
- what
后跟 /
、?
和空格以外的 1 个字符,然后是...
(?:[^\/?\s]{5})?
- 可选 除 /
、?
和空格外的 5 个字符。
我正在尝试提取 url 字符串的特定部分。一个简化的示例是在 url 中查找以 "who" 或 "what" 开头的任何字符串,总长度为 5 或 10 个字符,并停止匹配任何非字母数字字符串
例如:
http://www.test.com/who12/foo
-> who12
//5 个字符匹配以 who 开始并在 /
http://www.test.com/who1234567/foo
-> who1234567
//10 个字符匹配,从 who 开始到 /
http://www.test.com/what1
-> what1
//匹配字符串末尾的5个字符
http://www.test.com/what1?param=true
-> what1
//5 个字符匹配在 ?
我试过设置一些东西 here
它在 5 和 10 个字符的情况下在 / 上中断,但在 ?
情况下以及匹配位于字符串末尾的情况下失败。
是否有更简单的方法来完成此操作?
尝试使用以下正则表达式。
正则表达式: (?=.{5,10})(?:who|what)(?:[^\/?\s]*)
解释:
(?=.{5,10})
前瞻检查字符串的长度是否为 5 到 10 个字符。(?:who|what)
匹配文字who
或what
.[^\/?\s]*
是/
、?
、\s (whitespace)
的否定字符 class。因此将匹配除这些之外的其他字符。
我建议使用
\.com\/\K(?:who[^\/?\s]{2}|what[^\/?\s])(?:[^\/?\s]{5})?
参见 this regex demo。
如果不支持 PCRE \K
匹配重置运算符,请使用捕获方法:
\.com\/((?:who[^\/?\s]{2}|what[^\/?\s])(?:[^\/?\s]{5})?)
详情:
\.com\/
- 匹配.com/
以便为您需要的文本找到必要的左侧上下文(?:who[^\/?\s]{2}|what[^\/?\s])(?:[^\/?\s]{5})?
- 两个备选方案和可选的 5 个字符后的任意一个:who[^\/?\s]{2}
-who
后跟/
、?
和空格 以外的 2 个字符
|
- 或what[^\/?\s]
-what
后跟/
、?
和空格以外的 1 个字符,然后是...
(?:[^\/?\s]{5})?
- 可选 除/
、?
和空格外的 5 个字符。