Regex 使用正则表达式获取两个特定字符之间的所有文本
我有一个包含文件名的url。我想创建一个函数,使用正则表达式隔离文件名,然后将其另存为变量。设置函数并将字符串保存为变量是相当简单的。我正在努力用正则表达式来隔离字符串 下面是一个我正在使用的url示例 我想获取位于“/”和“”之间的文件名 所以我要寻找的值是“lovecraft-05.epub”TextRegex 使用正则表达式获取两个特定字符之间的所有文本,regex,Regex,我有一个包含文件名的url。我想创建一个函数,使用正则表达式隔离文件名,然后将其另存为变量。设置函数并将字符串保存为变量是相当简单的。我正在努力用正则表达式来隔离字符串 下面是一个我正在使用的url示例 我想获取位于“/”和“”之间的文件名 所以我要寻找的值是“lovecraft-05.epub”Text http://some-website.s3.amazonaws.com/lovecraft-05.epub?AWSAccessKeyId=KJHFHGFDSXF&Expires=3
http://some-website.s3.amazonaws.com/lovecraft-05.epub?AWSAccessKeyId=KJHFHGFDSXF&Expires=3568732&Signature=%3JHF%3KUHF%2Bnuvnu%5LHF%3D
正则表达式(带Perl):
输出
Match 1: .com/lovecraft-05.epub? 32 23
Group 1: lovecraft-05.epub 37 17
正文
正则表达式(带Perl):
输出
Match 1: .com/lovecraft-05.epub? 32 23
Group 1: lovecraft-05.epub 37 17
此正则表达式选择字符串
amazonaws.com
之后和?
字符之前的子字符串:
amazonaws.com\/([^\?]+)
编码时,需要找到组(1)
匹配项。请参阅以获取解释。此正则表达式选择字符串
amazonaws.com
之后和之前的子字符串?
字符:
amazonaws.com\/([^\?]+)
编码时,需要找到组(1)
匹配项。有关说明,请参见。您可以使用
/\/([^\/?]+)\?/
:
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
您可以使用/\/([^\/?]+)\?/
:
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), '/'), '/');
}
或使用预匹配
:
function get_filename_from_url($url) {
return preg_match('~(?<!:/)/\K[^/]*?(?=[?#]|$)~', $url, $m) ? $m[0] : '';
}
函数从url($url)获取文件名{
返回预匹配('~(?)?
在正则表达式方式中,需要测试#
或字符串末尾加问号,因为url的查询部分可能是可选的。如果查询部分不在此处,则文件名后面可以是片段部分或字符串结尾。我看到两种方法:
function get_filename_from_url($url) {
return ltrim(strrchr(parse_url($url, PHP_URL_PATH), '/'), '/');
}
或使用预匹配
:
function get_filename_from_url($url) {
return preg_match('~(?<!:/)/\K[^/]*?(?=[?#]|$)~', $url, $m) ? $m[0] : '';
}
函数从url($url)获取文件名{
返回预匹配('~(?)?
在正则表达式中,需要测试#
或字符串末尾加问号,因为url的查询部分可能是可选的。如果查询部分不在这里,文件名后面可以是片段部分或字符串结尾。由于正则表达式有不同的风格,您使用什么编程语言?可能是d我不确定。我正在使用WordPress。过去,我搜索直到找到某个东西,然后简单地复制、粘贴和调整直到它起作用。我从来没有声明过味道,或者至少我知道。我希望这听起来不是难以置信的愚蠢。@George应用时请接受答案你使用什么编程语言,就像regex一样不同的口味?可能是重复的我不确定。我正在使用WordPress。过去,我搜索直到找到某样东西,然后简单地复制、粘贴和调整直到它起作用。我从未声明过一种口味,或者至少我知道。我希望这听起来不是难以置信的愚蠢。@George请在适用时接受答案