正则表达式中的
我想测试一个字符串是否包含单词ok
。
我最初想做的是写下这个正则表达式:
ok[^a-z]
这意味着在我想要的ok
之后的下一件事可以是一些空白或标点符号,但不是字母数字字符,并且可以正确地区分ok
和okay
,只捕获ok
。
但是,如果我的整个输入字符串正好在ok
之后结束,就会出现问题。[^a-z]
要求存在另一个字符以得到满足。我不知道如何写一个条件,说不再有字符也是可以接受的。
期望结果:
ok
-满足...ok...
-满足ok hello world
-满足hello world ok
-满足okay
-不满足o k
-不满足
这将在Bash脚本中使用,根据本页,该脚本使用ERE regex方言。
预期用途示例:
if [[ "$@" =~ ok[^a-z] ]]; then
echo "Argument contains an "ok""
fi
w
表示所有字母、数字和下划线W
表示相反:它不匹配字母、数字和下划线$
表示一行的末尾(a|b)
表示一个或b(?=)
是一个积极的前瞻性,这意味着只有当后面的内容也匹配时才匹配(但实际上并没有捕捉到我们的前瞻性(
我们可以将所有这些组合起来,形成一个单一的正则表达式,以不匹配字母数字或行末
ok(?=W|$)
-只有当我们向前看时,我们发现一个非字母数字或一行的末尾时,才匹配ok