![](/img/trans.png)
[英]Using Regular Expression in Javascript to grab text between RSS/XML tag
[英]Using a Regular Expression to Grab all text in between two specific characters
我有一个包含文件名的网址。 我想创建一个使用正则表达式来隔离文件名,然后将其另存为变量的函数。 设置函数并将字符串保存为变量非常简单。 我正在努力用正则表达式来隔离字符串。
以下是我正在使用的网址的示例。
我想获取位于“ /”和“?”之间的文件名。
所以我要寻找的值是“ lovecraft-05.epub”
文本
http://some-website.s3.amazonaws.com/lovecraft-05.epub?AWSAccessKeyId=KJHFHGFDSXF&Expires=3568732&Signature=%3JHF%3KUHF%2Bnuvnu%5LHF%3D
正则表达式(与Perl):
\.com\/(.*)\?
产量
Match 1: .com/lovecraft-05.epub? 32 23
Group 1: lovecraft-05.epub 37 17
您可以使用/\\/([^\\/?]+)\\?/
:
Perl单线
echo "http://some-website.s3.amazonaws.com/lovecraft-05.epub?AWS?AccessKeyId=KJHFHGFDSXF&Expires=3568732&Signature=%3JHF%3KUHF%2Bnuvnu%5LHF%3D" \
| perl -ne 'print $1 if m=/([^/?]+)\?='
返回lovecraft-05.epub0
。
我看到两种方法可以做到这一点:
function get_filename_from_url($url) {
return ltrim(strrchr(parse_url($url, PHP_URL_PATH), '/'), '/');
}
或与preg_match
:
function get_filename_from_url($url) {
return preg_match('~(?<!:/)/\K[^/]*?(?=[?#]|$)~', $url, $m) ? $m[0] : '';
}
该模式的含义是:
~ # pattern delimiter
(?<!:/) # not preceded by :/
/ # literal slash
\K # discard character(s) on the left from the match result
[^/]*? # zero or more characters that are not a slash
(?=[?#]|$) # followed by a ? or a # or the end of the string
~
请注意,当URL格式不正确时,我选择默认情况下返回空字符串,显然,您可以选择其他行为。
以正则表达式的方式,由于URL的查询部分可能是可选的,因此需要测试#
或除问号之外的字符串结尾。 如果查询部分不在此处,则文件名之后可以是片段部分或字符串的结尾。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.