Shell 有两个值的脚本变量赋值(正则表达式)
Shell script variable assignment with two values (regular expression)
我正在尝试设置一个具有两个值的变量。这是一个例子:
letter='[[:alpha:]]'
digit='[[:digit:]]'
integer='$digit'
float='$digit.$digit'
整数变量必须出现一次或多次。变量 float 应显示第一个字段(点之前)零 或更多次。我该怎么做?
感谢帮助!
-- 更新--
能得到大家的支持真是太好了。下面是为我服务的解决方案:
letter='[[:alpha:]]'
digit='[[:digit:]]'
integer="${digit}+"
float="[0-9]*\.[0-9]+"
谢谢大家! :D
我没有研究过 bash 的 expr
命令(我假设你正在使用)来验证他们使用的是哪种正则表达式,所以你可能需要做一些类似 [a-zA-Z]
而不是 [[:alpha:]]
和类似的替换。但假设您在 letter
和 digit
中选择了正确的值,那么这应该有效:
expr match "$string" "(${digit}*.${digit}*)"
或者,使用您的 float
变量:
float="(${digit}*.${digit}*)"
expr match "$string" "$float"
如果您只想使用 return 值而不是 return 匹配的实际值,请删除括号。
以下任何一个都是整数的等价正则表达式:
integer="(${digit}+)"
integer="(${digit}{1,})"
integer="(${digit}${digit}*)"
请注意正则表达式有不同的 "flavors",在不同的上下文中需要转义,而在另一个上下文中则不需要。
对于 bash 命令行上的 egrep 和 grep -E:
float: [0-9]*\.[0-9]+
integer: [0-9]+
请参阅 http://www.cyberciti.biz/faq/grep-regular-expressions/ 处的 egrep regxes 图表以获取一些提示,但需要针对特定情况进行测试
对于 perl 和 java:
float: [0-9]*?\.[0-9]+?
integer: [0-9]+?
+ matches preceding char or char class >= 1 times
* matches preceding char or char class >= 0 times
. matches any char
\. matches an uninterpreted period
[0-9] matches the class of any digit
? forces reluctant (non-greedy) matching
我正在尝试设置一个具有两个值的变量。这是一个例子:
letter='[[:alpha:]]'
digit='[[:digit:]]'
integer='$digit'
float='$digit.$digit'
整数变量必须出现一次或多次。变量 float 应显示第一个字段(点之前)零 或更多次。我该怎么做?
感谢帮助!
-- 更新--
能得到大家的支持真是太好了。下面是为我服务的解决方案:
letter='[[:alpha:]]'
digit='[[:digit:]]'
integer="${digit}+"
float="[0-9]*\.[0-9]+"
谢谢大家! :D
我没有研究过 bash 的 expr
命令(我假设你正在使用)来验证他们使用的是哪种正则表达式,所以你可能需要做一些类似 [a-zA-Z]
而不是 [[:alpha:]]
和类似的替换。但假设您在 letter
和 digit
中选择了正确的值,那么这应该有效:
expr match "$string" "(${digit}*.${digit}*)"
或者,使用您的 float
变量:
float="(${digit}*.${digit}*)"
expr match "$string" "$float"
如果您只想使用 return 值而不是 return 匹配的实际值,请删除括号。
以下任何一个都是整数的等价正则表达式:
integer="(${digit}+)"
integer="(${digit}{1,})"
integer="(${digit}${digit}*)"
请注意正则表达式有不同的 "flavors",在不同的上下文中需要转义,而在另一个上下文中则不需要。
对于 bash 命令行上的 egrep 和 grep -E:
float: [0-9]*\.[0-9]+
integer: [0-9]+
请参阅 http://www.cyberciti.biz/faq/grep-regular-expressions/ 处的 egrep regxes 图表以获取一些提示,但需要针对特定情况进行测试
对于 perl 和 java:
float: [0-9]*?\.[0-9]+?
integer: [0-9]+?
+ matches preceding char or char class >= 1 times
* matches preceding char or char class >= 0 times
. matches any char
\. matches an uninterpreted period
[0-9] matches the class of any digit
? forces reluctant (non-greedy) matching