迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 操作系统 >

Bash 中的模式匹配

作者:迹忆客 最近更新:2023/05/16 浏览次数:

模式匹配是 Bash 中的一项强大功能,它允许您将字符串与模式进行比较,以找到匹配项或根据比较结果执行操作。 这在检查字符串格式或从较大字符串中提取子字符串等情况下很有用。

本文将讨论如何在 Bash 中进行模式匹配,并介绍模式匹配中使用的一些常用运算符和技术。


使用 =~ 运算符进行模式匹配

要了解模式匹配在 Bash 中的工作原理,让我们首先看一下用于执行模式匹配的 =~ 运算符。 该运算符有两个操作数:要匹配的字符串和要比较的模式。

例如,假设我们有一个名为 my_string 的字符串,其中包含一个 URL,我们想检查它是以“http”还是“https”开头。 我们可以使用 =~ 运算符来执行此比较。

my_string="https://www.example.com"

if [[ $my_string =~ ^https?:// ]]; then
  echo "The string starts with a valid URL"
fi

输出:

The string starts with a valid URL

在上面的代码中,我们使用 =~ 运算符将 my_string 变量与模式 ^https?:// 进行比较。 ^ 字符表示模式必须匹配字符串的开头,而 ? 字符表示前面的字符(在本例中为 https 中的 s)是可选的。

这意味着该模式将匹配字符串开头的“http://”或“https://”。

如果比较成功,则执行 if 语句,并打印消息“The string starts with a valid URL”。


使用 * 运算符进行模式匹配

模式匹配中的另一个常用运算符是 *(星号)字符,它表示前面的字符可以匹配零次或多次。 例如,假设我们有一个包含数字的字符串,我们想检查它是否是最多两位小数的有效十进制数。

我们可以使用 * 运算符来执行此比较。

my_string="3.14"

if [[ $my_string =~ ^[0-9]+.[0-9]{0,2}$ ]]; then
echo "The string is a valid decimal number"
else
echo "The string is not a valid decimal number"
fi

输出:

The string is a valid decimal number

在上面的代码中,我们使用 =~ 运算符将 my_string 变量与模式 ^[0-9]+\.[0-9]{0,2}$ 进行比较。 ^ 字符表示模式必须匹配字符串的开头,而 $ 字符表示模式必须匹配字符串的末尾。

[0-9] 字符类匹配0-9任意数字,+字符表示前面的字符类必须匹配一次或多次。

我们使用 \(反斜杠)字符来转义 . (点)字符,用于匹配任何单个字符。 {0,2} 量词表示前面的字符(在本例中为 [0-9] 字符类)必须匹配零到两次。

这意味着该模式只会匹配最多两位小数的数字,例如“3.14”或“42.00”。

如果比较成功,则执行if语句,并打印“该字符串是一个有效的十进制数”信息。


使用子模式进行模式匹配

模式匹配中使用的另一种常用技术是使用子模式。 子模式是括在括号中的模式的一部分,可用于对字符进行分组或引用输入字符串中的匹配子字符串。

例如,假设我们有一个包含格式为“YYYY-MM-DD”的日期的字符串,我们想从该字符串中提取年、月和日。 我们可以使用子模式来执行此提取。

my_string="2022-11-20"

if [[ $my_string =~ ^([0-9]{4})-([0-9]{2})-([0-9]{2})$ ]]; then
  year=${BASH_REMATCH[1]}
  month=${BASH_REMATCH[2]}
  day=${BASH_REMATCH[3]}

  echo "The year is: $year"
  echo "The month is: $month"
  echo "The day is: $day"
fi

输出:

The year is: 2022
The month is: 11
The day is: 20

在上面的代码中,我们使用 =~ 运算符将 my_string 变量与 ^([0-9]{4})-([0-9]{2})-([0-9]{2} )$ 模式。 ^$ 字符表示模式必须匹配整个字符串,而 ([0-9]{4})、([0-9]{2})([0-9]{2}) 子模式分别匹配日期的年、月和日部分。

如果比较成功,则执行if语句,从输入字符串中提取年月日。 提取的子字符串存储在 BASH_REMATCH 数组中,可以使用索引 1、2 和 3 进行访问,它们分别对应于第一、第二和第三个子模式。

总之,模式匹配是 Bash 中的一项强大功能,它允许您将字符串与模式进行比较,以找到匹配项或根据比较结果执行操作。 这可以使用 =~ 运算符来完成,它将字符串和模式作为操作数,如果字符串与模式匹配则返回 true。

模式匹配中使用的常见运算符和技术包括 *(星号)运算符,它匹配前面的字符零次或多次,以及子模式,它允许您对字符进行分组或从输入字符串中提取匹配的子字符串。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便