php正则表达式匹配2位数字,后跟某些单词

时间:2019-07-15 17:31:17

标签: regex preg-match

我想检测其中包含用户年龄的字符串,例如:

“我今年24岁” “加爱25 ans”

因此本质上它会寻找:

  • 以零个或多个字符(任意)开头
  • 后跟两位数字-匹配阿拉伯数字(0、1、2等)和印地语(٠、١、٢等)数字
  • 后跟“年龄”一词(年份,ans等)
  • 以零个或多个其他字符(任意)结尾

我用过:

/^[0-9]{2} +(ans|year)$/

到目前为止,但它仅匹配非常具体的字符串,例如“ 24 year”

3 个答案:

答案 0 :(得分:1)

一种可能的方法是

Error: Client network socket disconnected before secure TLS connection       was established
gyp ERR! stack     at TLSSocket.onConnectEnd (_tls_wrap.js:1092:19)
gyp ERR! stack     at Object.onceWrapper (events.js:286:20)
gyp ERR! stack     at TLSSocket.emit (events.js:203:15)
gyp ERR! stack     at endReadableNT (_stream_readable.js:1129:12)
gyp ERR! stack     at process._tickCallback (internal/process/next_tick.js:63:19)
gyp ERR! System Windows_NT 10.0.17763
gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\Users\\Joshu\\Documents\\project\\ProbationProject2\\ClientApp\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
gyp ERR! cwd C:\Users\Joshu\Documents\project\ProbationProject2\ClientApp\node_modules\node-sass
gyp ERR! node -v v10.16.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok
Build failed with error code: 1

,例如可以在超前使用。参见a demo on regex101.com

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

答案 1 :(得分:1)

摆脱^$。它们与字符串的开头和结尾匹配,因此,如果您在开头I am或在结尾old处将不起作用。

如果要匹配整个单词,请改用\b

/\b\d{2} +(ans|years)\b/

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

答案 2 :(得分:0)

不确定我是否选择了正确的词,但您可能想要设计类似以下的表达式:

\s+\p{N}{1,3}\s+(?:years?|an(?:née)?s|سنة|سنوات|عاما|साल)

演示

如果要浏览/简化/修改该表达式,请在this demo的右上角进行解释。

测试

$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 عاما