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