【发布时间】:2009-03-18 19:38:58
【问题描述】:
我正在尝试找到一种好方法来捕获距给定字符串不超过 N 个字符的数字。
例如,如果String是“age”并且N=4必须找到
"Age 5" => 5
"My age is 10 and I my name is John" => 10
"My age is almost 5 and I my name is Mary" => null
在最后一种情况下,数字与“年龄”相隔超过 4 个字符。
【问题讨论】:
我正在尝试找到一种好方法来捕获距给定字符串不超过 N 个字符的数字。
例如,如果String是“age”并且N=4必须找到
"Age 5" => 5
"My age is 10 and I my name is John" => 10
"My age is almost 5 and I my name is Mary" => null
在最后一种情况下,数字与“年龄”相隔超过 4 个字符。
【问题讨论】:
怎么样
age[^0-9]{0,4}[0-9]+
如果你想捕获可能找到的数字:
age[^0-9]{0,4}([0-9]+)
?
【讨论】:
类似于以下内容:
age[^\d]{,4}(\d+)
这意味着“年龄后跟 0 到 4 个非数字后跟一个或多个数字......捕获数字”
【讨论】:
[Aa]ge[\D]{,N}(\d+)
然后获取第一组的内容($1)。
【讨论】:
在这里扩展其他答案,如果您需要它在任一方向上的 5 个字符以内:
/((\d+)\D{,4})?age(\D{,4}(\d+))?/i
然后:
if(matches[2] != null)
{
if(matches[4] != null)
return max(matches[2], matches[4]); //or however you want to resolve this..
else
return matches[2];
}
return matches[4];
【讨论】: