我希望检测具有用户年龄的字符串,例如:
“我24岁了”“J‘’ai 25个人”
因此,从本质上说,它将寻找:
我用过:
/^[0-9]{2} +(ans|year)$/
到目前为止,它只匹配非常具体的字符串,如“24年”。
发布于 2019-07-15 17:38:10
发布于 2019-07-15 18:14:13
去掉^
和$
。它们与字符串的开头和结尾相匹配,所以如果在开头有I am
,或者在末尾有old
,它就不能工作。
如果您想匹配整个单词,请使用\b
代替。
/\b\d{2} +(ans|years)\b/
如果要匹配阿拉伯数字以外的数字,请使用\d
而不是[0-9]
。
发布于 2019-07-16 04:43:43
不确定我是否选择了正确的单词,但您可能希望设计一个类似于以下内容的表达式:
\s+\p{N}{1,3}\s+(?:years?|an(?:née)?s|سنة|سنوات|عاما|साल)
演示
如果希望探索/简化/修改该表达式,则在这个演示的右上面板解释该表达式。
测试
$re = '/\s+\p{N}{1,3}\s+(?:years?|an(?:née)?s|سنة|سنوات|عاما|साल)/m';
$str = 'I\'m 24 years old
J\'ai 25 ans
I have 25 year
عندي ٢٣ سنة
I\'m 24 years old
मैं 27 साल का हूँ
J\'ai 25 ans
I have 100 year
أنا 27 عاما
عندي ٢٣ سنة';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
foreach ($matches as $match) {
print(trim($match[0]) . "\n");
}
输出
24 years
25 ans
25 year
24 years
27 साल
25 ans
100 year
27 عاما
https://stackoverflow.com/questions/57044613
复制相似问题