Regex 多个单词组合的正则表达式是什么

Regex 多个单词组合的正则表达式是什么,regex,shell,Regex,Shell,有人能帮我找到下面模式的正则表达式吗 我正在尝试使用正则表达式来匹配shell脚本中的模式 该模式可以是“ab”“xy”“ij”“pqr”的任意顺序组合,并用逗号“,”或仅“all”分隔 前 多谢各位 @konsolebox@491243@ajp15243@Jerry 看起来我做错了什么,它只适用于RE regex4=“(ab | xy | ij | pqr)(,(ab | xy | ij | pqr))*”到目前为止,这也只适用于字符串类似于“ab,xy”的情况,只是“ab”不起作用。 以下是

有人能帮我找到下面模式的正则表达式吗

我正在尝试使用正则表达式来匹配shell脚本中的模式

该模式可以是“ab”“xy”“ij”“pqr”的任意顺序组合,并用逗号“,”或仅“all”分隔

多谢各位

@konsolebox@491243@ajp15243@Jerry 看起来我做错了什么,它只适用于RE regex4=“(ab | xy | ij | pqr)(,(ab | xy | ij | pqr))*”到目前为止,这也只适用于字符串类似于“ab,xy”的情况,只是“ab”不起作用。 以下是我迄今为止所做的尝试:

#!/usr/bin/ksh

echo
echo echo $1
echo

regex2="^(all|(ab|xy|ij|pqr)(,(ab|xy|ij|pqr))*)$"
regex3="^(all|(ab|xy|ij|pqr)(,(ab|xy|ij|pqr))*)$"
regex4="(ab|xy|ij|pqr)(,(ab|xy|ij|pqr))*"

if [[ $1 == $regex2 ]]
then
  echo "You got it again 22222222 !"
fi

if [[ $1 == $regex3 ]]
then
  echo "You got it again 33333333 !"
fi

if [[ $1 == $regex4 ]]
then
  echo "You got it again 44444444 !"
fi
输出:

$
$ test.ksh ab,xy

echo ab,xy

You got it again 44444444 !
$
$
$
$ test.ksh ab

echo ab

$
太平洋标准时间1:30

好的,有一些改进:

"((ab|xy|ij|pqr)|(ab|xy|ij|pqr)(,(ab|xy|ij|pqr))*)|all)$"

当输入为“xy”、“xy,ab”时,此选项起作用,但它也将“xy,ab,all”视为有效输入。

我认为这样做可以

^(((ab|xy|ij|pqr)(,(ab|xy|ij|pqr))*)|all)$
    • 可能是这样的:

      ^(all|(ab|xy|ij|pqr)(,(ab|xy|ij|pqr))*)$
      

      好的,看起来下面的内容终于重新工作了,谢谢大家的帮助

      (all)|(ab|xy|ij|pqr)|(ab|xy|ij|pqr)(,(ab|xy|ij|pqr)*)
      

      您是否有任何尝试?您所说的尝试是什么意思?我正在尝试在shell脚本if条件中匹配此模式。尝试与您到目前为止一直在尝试的内容相同。您是否编写了任何代码来尝试解决您的问题?如果是,请将其编辑到您的问题中。事实上,你的问题归结为“这是我的要求,解决方案是什么?”?这种格式可能有很多(旧的或新的)SO问题,但是一个关于SO的好问题通常有作者的代码尝试。如果没有其他问题,它会鼓励当前类型的答案:有代码但没有解释的答案。如果你对正则表达式知之甚少,那么当前的答案有点晦涩难懂。谢谢,请看问题后的输出。谢谢,请看问题后的输出。@Cosmic我想你需要在我的ksh版本中使用
      =~
      ,而不是
      =
      @Cosmic它没有。您使用的是什么版本的ksh?也许你可以用格雷普<代码>若echo“$1”| grep“$regex”>/dev/null我不知道ksh的那个一版本,那个么所有命令都不起作用(echo$ksh_version,${.sh.version})。>/dev/null有什么作用?@Cosmic它将grep的输出重定向为nothing(/dev/null)。
      if
      命令的唯一目的是让grep根据表达式检查字符串是否有效。
      (all)|(ab|xy|ij|pqr)|(ab|xy|ij|pqr)(,(ab|xy|ij|pqr)*)