正则表达式匹配网址
什么是正则表达式?
正则表达式是用于匹配文本的一种表达式语言。它使用应为常规字符和特殊字符的字符组成,特殊字符有不同的含义,用于指示匹配某些特定字符的方法。
在编程中,正则表达式经常用于字符串搜索,替换和验证。它可以用于各种编程语言,如Java,JavaScript,Python,PHP等等。
网址匹配的正则表达式
网址(URL)是Internet上的唯一标识符,因为在不同的网络资源之间提供链接是Web的基础。在编程中,需要匹配和确定URL,因此需要用正则表达式来管理。
下面是一个基本的网址正则表达式:
^((http[s]?|ftp):\/)?\/?([^:\/\s]+)((\/\w+)*\/)([\w\-\.]+[^#?\s]+)(.*)?(#[\w\-]+)?$
下面对上面的正则表达式逐一进行解释:
(http[s]?|ftp)
:匹配http, https或ftp协议。:\/
:匹配“:/”完整字符串。?
:在正则表达式中,“?”表示可选的元素。\/\/
:匹配“//”完整字符串。[^:\/\s]+
:匹配URL的主机名和端口号。(\/\w+)*
:匹配URL的路径。([\w\-\.]+[^#?\s]+)
:匹配URL的文件名。(.*)?
:匹配URL的查询参数。#[\w\-]+
:匹配URL的片段。
现在让我们看一些实际例子。
匹配Http URL
下面是一个有效的 HTTP URL 的正则表达式,可以匹配 HTTP 和 HTTPS 协议。
(http|https):\/\/([\w_-]+(?:(?:\.|\:)\w{2,})+)(?:\/[\w_\/\.]*(?:\?\S+)?)?
以下是该正则表达式的逐一解释:
(http|https)
:匹配 http 或 https 协议;:\/\/
:匹配://字符;([\w_-]+(?:(?:\.|\:)\w{2,})+)
:匹配域名;(?:\/[\w_\/\.]*(?:\?\S+)?)?
:匹配URL路径和查找字符串。
以下是一些示例:
import re
pattern = re.compile(r'(http|https):\/\/([\w_-]+(?:(?:\.|\:)\w{2,})+)(?:\/[\w_\/\.]*(?:\?\S+)?)?')
url = 'https://www.baidu.com'
if pattern.match(url):
print('Url matched!')
else:
print('Url not matched!')
以上代码将输出 Url matched!
。
匹配任何网址
如果您需要匹配任何网址,以下是一个结合了各种网址的正则表达式示例:
^(?:(http|https|ftp|smtp):\/\/)?(?:[a-z0-9-]+\.)+[a-z]{2,20}(?:(?:\/(?:[\w#!:.?+=&%@!\/-])*)+\/?)?$
以下是上面这个正则表达式的逐一解释:
(?:(http|https|ftp|smtp):\/\/)?
:一个匹配http,https,ftp或smtp协议的可选组合。(?:[a-z0-9-]+\.)+[a-z]{2,20}
:匹配网址主体,且包含2至20个字母的域名。(?:(?:\/(?:[\w#!:.?+=&%@!\/-])*)+\/?)
:匹配所有或无路径元素。
继续看一些示例代码:
import re
pattern = re.compile(r'^(?:(http|https|ftp|smtp):\/\/)?(?:[a-z0-9-]+\.)+[a-z]{2,20}(?:(?:\/(?:[\w#!:.?+=&%@!\/-])*)+\/?)?$')
url = 'https://www.google.com'
if pattern.match(url):
print('Url matched!')
else:
print('Url not matched!')
以上代码将输出 Url matched!
。
匹配一个IP地址
有时需要从文本中提取IP地址。下面是IP地址的正则表达式:
b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b
以下是上面这个正则表达式的逐一解释:
\b
:匹配一个单词边界。\d{1,3}
:匹配1到3位数字。\.
:匹配“.”。(
\d
{1,3}
)
:匹配1到3位数字,匹配IP地址的四个部分。\b
:匹配一个单词边界。
以下是一个示例:
import re
pattern = re.compile(r'\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b')
text = 'The IP address of this device is 192.168.0.1'
result = pattern.findall(text)
print(result)
以上代码将输出 ['192.168.0.1']
。
结论
在编程中,需要对URL进行匹配和确定。使用正则表达式,可以轻松地管理网址和从文本中提取IP地址。通过使用一些正则表达式和示例,可以更好地理解如何处理网址。