热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linuxshell正则表达式如何匹配域名(包含中文域名)

linuxshell正则表达式如何匹配域名(包含中文)shell匹配域名1.匹配示例2.使用差别3.中文域名4.为什么[\u4e00-\u9fa5]不能匹配中文(**想直接获取匹配




linux shell正则表达式如何匹配域名(包含中文)


  • shell匹配域名
    • 1. 匹配示例
    • 2.使用差别
    • 3.中文域名
    • 4.为什么[\u4e00-\u9fa5]不能匹配中文(**想直接获取匹配包含中文域名的小伙伴,点这里直接跳转**)
    • 5.分析正则表达式


shell匹配域名


1. 匹配示例

最近的项目需要校验一下域名格式匹配,百度一下,说明如下:


  • DNS规定,域名中的标号都由英文字母和数字组成,每一个标号不超过63个字符,也不区分大小写字母。标号中除连字符(-)外不能使用其他的标点符号。级别最低的域名写在最左边,而级别最高的域名写在最右边。由多个标号组成的完整域名总共不超过255个字符。
    由此匹配完整域名的正则表达式:

^[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})*$

使用例如:

#echo "baidu.com " | egrep "^[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})*$"
#baidu.com

另外搜索到好多这种类似规则:

^(?=^.{3,255}$)[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$

这类规则使用上面的egrep 会不生效,无法正确匹配,可使用下面的方法:

#echo "baidu.com " | grep -P "^(?=^.{3,255}$)[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$"
#baidu.com

2.使用差别

可以从上面的使用上看到,我将 egrep替换成了 grep -P ,原因如下:
A. grep -P


man grep的时候有一个-P,文档上的英文:



-P, --perl-regexp


Interpret PATTERN as a Perl regular expression. This is highly experimental and grep -P may warn of nimplemented features.

这意思是,-P 可以让grep使用perl的正则表达式语法,因为perl的正则更加多元化,能实现更加复杂的场景。

B. egrep

正则表达式根据元字符的数量及功能不同又分为基本正则表达式(grep)和拓展正则表达式(egrep)。而grep和egrep同属于文本搜索工具,可根据用户指定的文本模式(搜索条件)对目标文件进行逐行搜索,显示能匹配到的行。用法上grep –E等同于egrep,与grep和egrep相似的文本搜索工具还有fgrep,因不支持使用正则表达式,所以不再单独介绍。

从上面的区分介绍可知,在使用正则表达上的匹配上,grep -P 的语法更管饭一些,以后使用可多参考perl语法


3.中文域名

上面的匹配和搜索已经可以做到对域名的匹配,但上面的域名匹配中并不包含对中文的匹配。


中文国际域名: 中文域名必须包含汉字,并可以含字母(A-Z,a-z,大小写等价)、数字(0-9)或连接符(-)。各级中文域名之间用实点(.)连接,各级中文域名长度不得超过20个字符。简繁体为不同的域名。


需要将上面的内容和无中文域名结合:
这是我在网上找到的最详细的说明了。对应的正则表达式(不够详细,以下为例):

^[a-zA-Z0-9\u4e00-\u9fa5][-a-zA-Z0-9\u4e00-\u9fa5]{0,62}(\.[a-zA-Z0-9\u4e00-\u9fa5][-a-zA-Z0-9\u4e00-\u9fa5]{0,62})*$

其中,\u4E00-\u9FA5 就是代表着中文的意思,以上的格式在网上的在线正则表达式匹配上都可以执行通过,但是,可但是,拿到linux操作系统中,执行以下脚本,却会报错:

# echo "阿斯蒂芬.dsaf"|egrep "/^[A-Za-z0-9_\u4E00-\u9FA5]+([\.\-][A-Za-z0-9_\u4E00-\u9FA5]+)*$/"
# grep: Invalid range end

搜索了下,没有得到确切的答案,比较靠谱的一个答案这样说:


需要根据系统bash的中文编码规则进行匹配


凉了。这怎么办?


4.为什么[\u4e00-\u9fa5]不能匹配中文(想直接获取匹配包含中文域名的小伙伴,点这里直接跳转


grep正则匹配中文可以考虑:
grep ‘[^\u4e00-\u9fa5]’ test.log (如果不生效,见下面的命令)
注: grep ‘[\u4e00-\u9fa5]’ test.log 命令经常不生效
此外下面命令可生效:
grep -P ‘[\p{Han}]’ test.log
参考:https://blog.csdn.net/u010627840/article/details/41863395


直到找到了上面的说法,才找到匹配的方式,废话不说,上代码:

# echo "2a阿萨德2.sdf.as打扫房间dfas" |grep -P "^(?=^.{3,255}$)[a-zA-Z0-9\p{Han}][-a-zA-Z0-9\p{Han}]{0,62}(\.[a-zA-Z0-9\p{Han}][-a-zA-Z0-9\p{Han}]{0,62})+$"
# 2a阿萨德2.sdf.as打扫房间dfas

成功匹配!!!!!!


5.分析正则表达式


  • (?=^.{3,255}$)
    匹配3-255个字符
  • [a-zA-Z0-9\p{Han}][-a-zA-Z0-9\p{Han}]{0,62}
    匹配“a-z A-Z 0-9 中文 - a-z A-Z 0-9 中文” 以内的的字符,字符个数在0-62之间
  • (.[a-zA-Z0-9\p{Han}][-a-zA-Z0-9\p{Han}]{0,62})+$
    至少出现一次

不知道上面的说法是否正确,如果有不确定的描述,可留言纠正哈~~[\抱拳]



推荐阅读
  • Python正则表达式详解:掌握数量词用法轻松上手
    Python正则表达式详解:掌握数量词用法轻松上手 ... [详细]
  • 本文旨在构建一个JavaScript函数,用于对用户输入的电子邮件地址和密码进行有效性验证。该函数将确保输入符合标准格式,并检查密码强度,以提升用户账户的安全性。通过集成正则表达式和条件判断语句,该方法能够有效防止常见的输入错误,同时提供即时反馈,改善用户体验。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • HBase Java API 进阶:过滤器详解与应用实例
    本文详细探讨了HBase 1.2.6版本中Java API的高级应用,重点介绍了过滤器的使用方法和实际案例。首先,文章对几种常见的HBase过滤器进行了概述,包括列前缀过滤器(ColumnPrefixFilter)和时间戳过滤器(TimestampsFilter)。此外,还详细讲解了分页过滤器(PageFilter)的实现原理及其在大数据查询中的应用场景。通过具体的代码示例,读者可以更好地理解和掌握这些过滤器的使用技巧,从而提高数据处理的效率和灵活性。 ... [详细]
  • 如何利用正则表达式(regexp)实现高效的模式匹配?本文探讨了正则表达式在编程中的应用,并分析了一个示例程序中存在的问题。通过具体的代码示例,指出该程序在定义和使用正则表达式时的不当之处,旨在帮助读者更好地理解和应用正则表达式技术。 ... [详细]
  • 在《Python编程基础》课程中,我们将深入探讨Python中的循环结构。通过详细解析for循环和while循环的语法与应用场景,帮助初学者掌握循环控制语句的核心概念和实际应用技巧。此外,还将介绍如何利用循环结构解决复杂问题,提高编程效率和代码可读性。 ... [详细]
  • 本文作为“实现简易版Spring系列”的第五篇,继前文深入探讨了Spring框架的核心技术之一——控制反转(IoC)之后,将重点转向另一个关键技术——面向切面编程(AOP)。对于使用Spring框架进行开发的开发者来说,AOP是一个不可或缺的概念。了解AOP的背景及其基本原理,对于掌握这一技术至关重要。本文将通过具体示例,详细解析AOP的实现机制,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本文探讨了在当前正则表达式中支持空格字符的方法。作者尝试在正则表达式中允许空白字符,但遇到了一些问题,导致该表达式无法正确识别空格。文章详细分析了问题的原因,并提出了解决方案,旨在提高正则表达式的灵活性和实用性。 ... [详细]
  • 2019年斯坦福大学CS224n课程笔记:深度学习在自然语言处理中的应用——Word2Vec与GloVe模型解析
    本文详细解析了2019年斯坦福大学CS224n课程中关于深度学习在自然语言处理(NLP)领域的应用,重点探讨了Word2Vec和GloVe两种词嵌入模型的原理与实现方法。通过具体案例分析,深入阐述了这两种模型在提升NLP任务性能方面的优势与应用场景。 ... [详细]
  • PHP正则表达式主要用于字符串的模式分割、匹配、查找及替换操作。使用正则表达式在某些简单的环境下可能效率不高,因此如何更好的使用PHP正则表达式需要综合考虑。PHP正则表达式的定义 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • 本文详细介绍了批处理技术的基本概念及其在实际应用中的重要性。首先,对简单的批处理内部命令进行了概述,重点讲解了Echo命令的功能,包括如何打开或关闭回显功能以及显示消息。如果没有指定任何参数,Echo命令会显示当前的回显设置。此外,文章还探讨了批处理技术在自动化任务执行、系统管理等领域的广泛应用,为读者提供了丰富的实践案例和技术指导。 ... [详细]
  • 深入解析经典卷积神经网络及其实现代码
    深入解析经典卷积神经网络及其实现代码 ... [详细]
  • 【Python爬虫实操】 不创作小说,专精网站内容迁移,超高效!(含源代码)
    本文详细介绍了如何利用Python爬虫技术实现高效网站内容迁移,涵盖前端、后端及Android相关知识点。通过具体实例和源代码,展示了如何精准抓取并迁移网站内容,适合对Python爬虫实战感兴趣的开发者参考。 ... [详细]
author-avatar
AdrianFree覀
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有