首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果是在regex中

如果是在regex中
EN

Stack Overflow用户
提问于 2011-07-07 10:53:32
回答 2查看 612关注 0票数 1

我需要一个正则表达式,它捕获第一个表达式。如果找不到,就抓到第二个。第一个是一个2-4长的数字,如果找不到,只需捕捉没有“X”的2-4长数。

foo bar 321字符串1234X等// catch 1234X

我找到了一个简短的例子这里 (a)?b(?(1)c|d),但我误解了它。

代码语言:javascript
复制
(\d{2,4}X)?(?(1)(\d{2,4})X|\D(\d{2,4})\D)

它总是能找到'321‘。我试过几种变体,但都没有用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-07 11:04:14

你可以用:

代码语言:javascript
复制
/(?| .*? (\d{2,4}X) | (\d{2,4}) (?!X) )/xs

(在使用前,请正确引用并转义。)

请注意,它将匹配1111X1111111111111111111X,如果数字是“单词”的一部分。如果你不想那样做的话,可以使用这样的方法:

代码语言:javascript
复制
/(?| .*? \b(\d{2,4}X) | \b(\d{2,4}) ) \b /xs

Perl演示:

代码语言:javascript
复制
perl -E "say join',','foo 123 bar 345X 44 33X' =~ /(?| .*? (\d{2,4}X) | (\d{2,4}) (?!X) )/xs;"
345X
票数 5
EN

Stack Overflow用户

发布于 2011-07-07 10:57:48

你为什么不把他们全抓起来呢?用其他的方法来代替吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6609473

复制
相关文章

相似问题

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