![](/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.