首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >php正则表达式匹配两个数字,后面跟着特定的单词

php正则表达式匹配两个数字,后面跟着特定的单词
EN

Stack Overflow用户
提问于 2019-07-15 17:31:17
回答 3查看 446关注 0票数 0

我希望检测具有用户年龄的字符串,例如:

“我24岁了”“J‘’ai 25个人”

因此,从本质上说,它将寻找:

  • 启动零或多个字符(任意)
  • 后面跟着两位数字--匹配阿拉伯语(0,1,2等)和印地语(٠,١,٢等)数字
  • 后面跟着一个‘年龄’词(年龄,ans等)
  • 以零或多个其他字符结尾(任意)

我用过:

代码语言:javascript
运行
复制
/^[0-9]{2} +(ans|year)$/

到目前为止,它只匹配非常具体的字符串,如“24年”。

EN

回答 3

Stack Overflow用户

发布于 2019-07-15 17:38:10

一种可能的方法是

代码语言:javascript
运行
复制
\b\p{N}+\s+(?:an|year)s?

例如,可以在前瞻中使用。见regex101.com上的演示

初始表达式使用锚,即您的子字符串只能在开头和结尾进行匹配。

票数 1
EN

Stack Overflow用户

发布于 2019-07-15 18:14:13

去掉^$。它们与字符串的开头和结尾相匹配,所以如果在开头有I am,或者在末尾有old,它就不能工作。

如果您想匹配整个单词,请使用\b代替。

代码语言:javascript
运行
复制
/\b\d{2} +(ans|years)\b/

如果要匹配阿拉伯数字以外的数字,请使用\d而不是[0-9]

票数 0
EN

Stack Overflow用户

发布于 2019-07-16 04:43:43

不确定我是否选择了正确的单词,但您可能希望设计一个类似于以下内容的表达式:

代码语言:javascript
运行
复制
\s+\p{N}{1,3}\s+(?:years?|an(?:née)?s|سنة|سنوات|عاما|साल)

演示

如果希望探索/简化/修改该表达式,则在这个演示的右上面板解释该表达式。

测试

代码语言:javascript
运行
复制
$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");
}

输出

代码语言:javascript
运行
复制
24 years
25 ans
25 year
24  years
27 साल
25  ans
100  year
27 عاما
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57044613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档