0

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

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

模式可以是 'ab' 'xy' 'ij' 'pqr' 的组合,以任何顺序并以逗号 ',' 分隔,或者仅是 'all'

前任。

1) "ab,xy,ij,pqr" - valid

2) "ij,pqr" - valid

3) "all" - valid

4) "ij,ab," - invalid because it ends with a comma

5) "all,xy" - invalid because 'all' cannot be combined with xy ij pqr or ab

6) ",xy" - invalid because it starts with comma

7) "xy" - valid

谢谢你。

@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”视为有效输入。

4

3 回答 3

1

我认为这会做到。

^(((ab|xy|ij|pqr)(,(ab|xy|ij|pqr))*)|all)$
于 2013-09-12T17:47:31.727 回答
1

大概是这样的:

^(all|(ab|xy|ij|pqr)(,(ab|xy|ij|pqr))*)$
于 2013-09-12T17:51:02.397 回答
0

好的,看起来下面的RE终于工作了,谢谢大家的帮助。

(all)|(ab|xy|ij|pqr)|(ab|xy|ij|pqr)(,(ab|xy|ij|pqr)*)
于 2013-09-13T16:24:02.107 回答