力扣(leetCode)shell 193.有效电话号码

题目描述:

给定一个包含电话号码列表(一行一个电话号码)的文本文件 file.txt,写一个单行 bash 脚本输出所有有效的电话号码。

你可以假设一个有效的电话号码必须满足以下两种格式: (xxx) xxx-xxxx 或 xxx-xxx-xxxx。(x 表示一个数字)

你也可以假设每行前后没有多余的空格字符。

示例:

假设 file.txt 内容如下:

987-123-4567
123 456 7890
(123) 456-7890

你的脚本应当输出下列有效的电话号码:

987-123-4567
(123) 456-7890

题解:

#!/bin/bash
grep -P '^([0-9]{3}-|\([0-9]{3}\) )[0-9]{3}-[0-9]{4}$' file.txt 

awk '/^([0-9]{3}-|\([0-9]{3}\) )[0-9]{3}-[0-9]{4}$/' file.txt

gawk '/^([0-9]{3}-|\([0-9]{3}\) )[0-9]{3}-[0-9]{4}$/' file.txt

主要是处理正则表达式拼接

正则表达式速记技巧

.        []        ^        $

四个字符是所有语言都支持的正则表达式,所以这四个是基础的正则表达式。正则难理解因为里面有一个等价的概念,这个概念大大增加了理解难度,让很多初学者看起来会懵,如果把等价都恢复成原始写法,自己书写正则就超级简单了,就像说话一样去写你的正则了:

这四个字符是所有

等价:

等价是等同于的意思,表示同样的功能,用不同符号来书写。

?,*,+,\d,\w 都是等价字符

?等价于匹配长度{0,1}

*等价于匹配长度{0,}

+等价于匹配长度{1,}

\d等价于[0-9]

\D等价于[^0-9]

\w等价于[A-Za-z_0-9]

\W等价于[^A-Za-z_0-9]。

常用运算符与表达式:

^ 开始
() 域段
[] 包含,默认是一个字符长度
[^] 不包含,默认是一个
{n,m} 匹配长度
. 任何单个字符(\.字符点)
|
\ 转义
$ 结尾
[A-Z] 26个大写字母
[a-z] 26个小写字母
[0-9] 数字0到9
[A-Za-z0-9]

26个大写字母、26个小写字母

和0到9数字

, 分割

分割语法:

[A,H,T,W] 包含字母A或H或T或W
[a,h,t,w] 包含字母a或h或t或w
[0,3,6,8] 包含数字0或3或6或8

语法与释义:

基础语法 "^([]{})([]{})([]{})$"

正则字符串 = "开始([包含内容]{长度})([包含内容]{长度})([包含内容]{长度})结束"

?,*,+,\d,\w 这些都是简写的,完全可以用[]和{}代替,在(?:)(?=)(?!)(?<=)(?<!)(?i)(*?)(+?)这种特殊组合情况下除外。

初学者可以忽略?,*,+,\d,\w一些简写标示符,学会了基础使用再按表自己去等价替换

实例:

字符串:tel:086-0666-88810009999

原始正则:"^tel:[0-9]{1,3}-[0][0-9]{2,3}-[0-9]{8,11}$"

速记理解:开始 "tel:普通文本"[0-9数字]{1至3位}"-普通文本"[0数字][0-9数字]{2至3位}"-普通文本"[0-9数字]{8至11位} 结束"

等价简写后正则写法:"^tel:\d{1,3}-[0]\d{2,3}-\d{8,11}$" ,简写语法不是所有语言都支持。

 

相关推荐

  1. (leetCode)shell 193.有效电话号码

    2024-02-02 07:22:03       47 阅读
  2. 100】17.电话号码的字母组合

    2024-02-02 07:22:03       58 阅读
  3. :17. 电话号码的字母组合

    2024-02-02 07:22:03       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-02 07:22:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-02 07:22:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-02 07:22:03       87 阅读
  4. Python语言-面向对象

    2024-02-02 07:22:03       96 阅读

热门阅读

  1. [经典面试题]169. 多数元素

    2024-02-02 07:22:03       52 阅读
  2. golang网络编程day5

    2024-02-02 07:22:03       38 阅读
  3. I2S、I2C、SPI和UART的区别

    2024-02-02 07:22:03       51 阅读
  4. Vue中嵌入原生HTML页面的方法

    2024-02-02 07:22:03       54 阅读
  5. Backend - Django CSRF 跨域请求伪造

    2024-02-02 07:22:03       46 阅读
  6. 安装配置hive

    2024-02-02 07:22:03       56 阅读
  7. kafka

    2024-02-02 07:22:03       48 阅读