【问题标题】:if with regex - string matches either entire string OR entire string + another character?如果使用正则表达式 - 字符串匹配整个字符串或整个字符串 + 另一个字符?
【发布时间】:2019-12-12 03:18:00
【问题描述】:

对不起,如果这样的问题已经有了答案,我真的不知道该怎么说,所以我会尽力而为。

如何使 if 语句匹配整个字符串,或匹配带有额外字符的整个字符串?


假设$animals 变量中存储了,dog,cat,pig,bird,goat,。我想看看用户定义的变量$your_pet 是否是逗号分隔值之一,或者是否在末尾带有“s”。

所以也许会有这样的工作:

your_pet=bird

if [[ "${your_pet}" == ,*"${animals}"*, || "${your_pet}"s == ,*"${animals}"*, ]]
then
....

但是,我需要检查$your_pet 是否以“s”结尾,如果有或没有,则接受它。 (上面的代码未经测试,但我几乎可以肯定它不会工作)。

以下是$your_pet 的所有允许值:

dog
dogs
cat
cats
pig
pigs
bird
birds
goat
goats

以下是一些不允许允许的示例:

my dog
my dogs
 dog
hamster
hamsters

我觉得在 if 语句中使用正则表达式可以解决问题,但我对正则表达式知之甚少,不知道该使用什么。 (如果在这种情况下甚至需要正则表达式)

在 OS X 10.11.6 El Capitan 上使用 bash 3.2.57(1)-release

谢谢

【问题讨论】:

  • 这可能会有所帮助:[[ "$animals" =~ ,cats{0,1}, ]] && echo match
  • @Cyrus 谢谢,但我需要检查$your_pet(带或不带“s”)是否匹配$animals中的任何内容
  • 不只是添加“s”的复数形式,例如“platypus”和“platypuses”,“ox”和“oxen”。您的方法基于对复数形成方式的过度简化。如果我要实现这一点,我会简单地将每只动物的单数和复数形式存储在您的收藏中。它使代码变得简单、易懂和可靠。
  • @Bohemian 这只是一个简单的例子,在我的实际用例中这永远不会成为问题。

标签: regex bash macos if-statement command-line


【解决方案1】:

您可以删除s(如果存在),然后比较是否匹配

your_pet=bird

if [[ "$animals" =~ ",${your_pet%s}," ]]
then
   ...

但是,请考虑其他复数形式,例如 goose, geese

【讨论】:

  • 为我工作,谢谢!是的,在实际应用中,我计划以不同的拼写复数形式使用它不会成为问题
  • 这与类似if [[ "$animals" == *",${your_pet%s},"* ]]的内容相比如何?
猜你喜欢
  • 1970-01-01
  • 2020-09-19
  • 2013-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 2020-08-23
相关资源
最近更新 更多