我一直在阅读这个网站上关于正则表达式的问题,但我的问题似乎有些不同。 我需要匹配一个两位数,例如23到75。 我是在HP-UX Unix系统上进行这个操作的。 我找到了3-44或任何数字长度的示例,但没有固定长度的内容,这有点令人惊讶,但也许我没有理解变量长度示例的答案。
我一直在阅读这个网站上关于正则表达式的问题,但我的问题似乎有些不同。 我需要匹配一个两位数,例如23到75。 我是在HP-UX Unix系统上进行这个操作的。 我找到了3-44或任何数字长度的示例,但没有固定长度的内容,这有点令人惊讶,但也许我没有理解变量长度示例的答案。
由于您没有说明这是否是除其他字符之外的内容(或者在更大的字符串中间),因此我在这里包含逻辑以指示您需要匹配字符串的数字部分。这应该可以帮助您实现。我们正在创建第二个数字的范围,仅允许那些字符。然后,我们将其与其他范围进行比较,使用or
:
(2[3456789]|[3456][0-9]|7[012345])
正如oded指出的那样,您也可以这样做,因为子范围也被接受(取决于您使用的应用程序中REGEX的实现):
(2[3-9]|[3-6][0-9]|7[0-5])
根据标题,将最后的5更改为9即可从75-79:
(2[3-9]|[3-6][0-9]|7[0-9])
^
和$
来表示字符串的开头和结尾。grep "[^0-9]?(2[3-9]|[3-6][0-9]|7[0-9])[^0-9]?" folder
(2[3-9]|[3-6][0-9]|7[0-5])
。 - Oded|
表示或,同时使用 []
括号来指示允许的字符。 - AbsoluteƵERØ\b(2[3-9]|[3-7][0-9])\b
从29到75:\b(29|[3-6][0-9]|7[0-5])\b
还有一个好玩的,从192到1742:\b(19[2-9]|[2-9][0-9]{2}|1[0-6][0-9]{2}|17[0-3][0-9]|174[0-2])\b
:)/^[0-9]|[0-5][0-9]|6[0-3]$/
通过这种方式,您可以为任何两位数范围使用正则表达式
仅补充一点,这里提供了一个用JavaScript生成字符串的解决方案。您可以单击“运行代码段”以输入自己的范围并获取自己的字符串。
function regexRangeString(lower,upper){
let current=lower;
let nextRange=function(){
let currentString=String(current);
let len=currentString.length;
let string="";
let newUpper;
for(let digit=0;digit<len;digit++){
let index=len-digit-1;
let lower=Number(currentString[index]);
let thisString="";
for(let u=9;u>=lower;u--){
let us=currentString.substring(0,index)+u+currentString.substring(index+1,len);
if(Number(us)<=upper){
if(lower==u){
thisString=lower;
}
else{
thisString=`[${lower}-${u}]`;
}
currentString=currentString.substring(0,index)+u+currentString.substring(index+1,len);
break;
}
}
if(thisString!="[0-9]"){
string=currentString.substring(0,index)+thisString+string;
break;
}
else{
string=thisString+string
}
}
current=Number(currentString)+1;
return string
}
let string=""
while(current<upper){
string+="|"+nextRange(current);
}
string="("+string.slice(1)+")";
return string
}
let lower=prompt("Enter Lower Bound")
let upper=prompt("Enter Upper Bound")
alert(regexRangeString(lower,upper))
例如:
regexRangeString(72,189)
生成以下输出字符串:
(7[2-9]|[8-9][0-9]|1[0-8][0-9])
你有两类数字需要匹配:
编辑:好吧,那是标题范围(23-79)。在你的问题(23-75)中,你有三个:
75
,而不是 79
。 - Oded这应该可以解决问题:
/^([2][3-9]|[3-6][0-9]|[7][0-5])$/
^
和 $
将使其严格匹配仅为2个数字,所以如果您有即234则无法工作。
grep
的东西来匹配包含他们搜索的数字的行,这也不起作用。 - AbsoluteƵERØ