我希望下面的代码会回显“是”,但事实并非如此。由于某种原因,它与单引号不匹配。为什么?
str="{templateUrl: '}"
regexp="templateUrl:[\s]*'"
if [[ $str =~ $regexp ]]; then
echo "yes"
else
echo "no"
fi
Replace:
regexp="templateUrl:[\s]*'"
With:
regexp="templateUrl:[[:space:]]*'"
根据man bash
, the =~
运算符支持“扩展正则表达式”,如中定义man 3 regex
. man 3 regex
说它支持 POSIX 标准并建议读者参考man 7 regex
。 POSIX 标准支持[:space:]
作为空白的字符类。
The GNU bash manual http://www.gnu.org/software/bash/manual/bash.html记录支持的字符类如下:
在“[”和“]”中,可以使用以下命令指定字符类
句法 [:class:], 在哪里class是以下定义的类之一
在 POSIX 标准中:
alnum alpha ascii 空白 cntrl 数字图下部打印
punct space 上位字 xdigit
唯一提到的是\s
我在 GNU 中发现的bash
文档用于提示中不相关的用途,例如PS1
,不在正则表达式中。
的含义*
[[:space:]]
将匹配正好一个空白字符。[[:space:]]*
将匹配零个或多个空白字符。
和...之间的不同space
and blank
POSIX 正则表达式 http://en.wikibooks.org/wiki/Regular_Expressions/POSIX_Extended_Regular_Expressions提供两类空白:[[:space:]]
and [[:blank:]]
:
使用字符类的一个主要优点是它们对于 unicode 字体是安全的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)