我想检测其中包含用户年龄的字符串,例如:
“我今年24岁” “加爱25 ans”
因此本质上它会寻找:
我用过:
/^[0-9]{2} +(ans|year)$/
到目前为止,但它仅匹配非常具体的字符串,例如“ 24 year”
答案 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 عاما