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})+$
    至少出现一次

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

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

  1. linux绑定中文域名,linux shell正则表达式如何匹配域名(包含中文域名)

    linux shell正则表达式如何匹配域名(包含中文) shell匹配域名 1. 匹配示例 最近的项目需要校验一下域名格式匹配,百度一下,说明如下: DNS规定,域名中的标号都由英文字母和数字组成, ...

  2. linux shell 正则表达式

    linux shell 正则表达式比较 则表达式:在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那 ...

  3. UNIX和Linux Shell正则表达式语法介绍

    一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式.该模式描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串 ...

  4. 经典:linux shell 正则表达式(BREs,EREs,PREs)差异比较

    转载:http://www.cnblogs.com/chengmo/archive/2010/10/10/1847287.html 正则表达式:在计算机科学中,是指一个用来描述或者匹配一系列符合某个句 ...

  5. 【转】linux shell 正则表达式(BREs,EREs,PREs)差异比较

    我想各位也和我一样,再linux下使用grep,egrep, awk , sed, vi的搜索时,会经常搞不太清楚,哪此特殊字符得使用转义字符'\' ..   哪些不需要, grep与egrep的差异 ...

  6. 正则表达式:c#正则表达式判断,不包含中文

    正则表达式判断,当不包含中文时 代码 if (System.Text.RegularExpressions.Regex.IsMatch( m_plotName, @"[\u4e00-\u9f ...

  7. linux dns中文域名,Nginx 中文域名配置详解及实现

    Nginx中文域名配置 Nginx虚拟主机上绑定一个带中文域名,比如linuxeye.中国,浏览器不能跳转. why? 因为操作系统的核心都是英文组成,DNS服务器的解析也是由英文代码交换,所以DNS ...

  8. 最新域名查询-中文域名注册到期查询软件

    最新域名查询 最新域名查询指的是查询最新注册的域名或者快速确认某个域名是否被注册等相关信息的工具.以下是一些常用的最新域名查询工具: 域名Whois查询工具:Whois查询是一种查询域名注册信息的方式 ...

  9. Linux shell 正则表达式用法

    1." \  " 用法 用于关闭其后续字符的特殊含义,恢复字符的本身含义,如:\\ 表示字符 \ 2. " . " 用法 匹配任意单个字符 3. " ...

最新文章

  1. android view padding,记一次tablayout的tabView偷偷自带padding的问题
  2. if you receive money from others
  3. VC INI文件读写 和 GetProfileString,WriteProfileString函数的使用
  4. 黑客开始利用云计算暴力破解密码
  5. android es管理工具,Android
  6. php跳转到safari打开,新手教程: 如何重新打开关闭的Safari标签
  7. 【javascript】简单原型链、借用构造函数
  8. xor(线性基的合并)
  9. java写顾客购买的商品总价格_成交总金额=商品价格×商品件数-总优惠额。 如果一个顾客,购买的商品一口价为5元,购买的商品件数为4,总物流运费4元,满20送3,请问成交的金额是()。...
  10. 如何设计 React 代码结构?
  11. dbentry访问带密码的Access
  12. 马健计算机博士,马健-中国科学院大学-UCAS
  13. mfc 子窗体任何消息都不触发_你不知道的 WebSocket
  14. 2018年泰迪杯数据挖掘比赛c题
  15. 随机搜索和网格搜索以优化函数
  16. 2018年度中国IT行业杰出人物奖出炉
  17. c语言公交查询系统,公交路线查询系统(基于数据结构和C语言)完整
  18. android studio 使用lint工具优化app时全过程记录
  19. Vue CLI脚手架详细教程
  20. JAVA-stage3-day03-MybatisMybatisPlus

热门文章

  1. CSDN怎么转载别人的博客(转载)
  2. python当型循环_Pro108-泡面Python[Py#008]——5min-当型循环 While
  3. 2022年备考考研英语二作文
  4. 微信小程序的悬浮按钮
  5. 关于个人的第二个程序——黑白棋续
  6. 细说马斯洛需求层次理论与产品的关系——老吴说产品
  7. 什么是应用服务器,有什么用?
  8. SSMS使用基础及实验数据准备
  9. 阿里云大学安全课程-阿里云首席安全研究员吴瀚清:WannaCry事件最“细思恐极“的一个事实是?
  10. 小程序运营要善于做好活动推送