我需要一个正则表达式,它捕获第一个表达式。如果找不到,就抓到第二个。第一个是一个2-4长的数字,如果找不到,只需捕捉没有“X”的2-4长数。
foo bar 321字符串1234X等// catch 1234X
我找到了一个简短的例子这里 (a)?b(?(1)c|d),但我误解了它。
(\d{2,4}X)?(?(1)(\d{2,4})X|\D(\d{2,4})\D)它总是能找到'321‘。我试过几种变体,但都没有用。
发布于 2011-07-07 11:04:14
你可以用:
/(?| .*? (\d{2,4}X) | (\d{2,4}) (?!X) )/xs(在使用前,请正确引用并转义。)
请注意,它将匹配1111X在1111111111111111111X,如果数字是“单词”的一部分。如果你不想那样做的话,可以使用这样的方法:
/(?| .*? \b(\d{2,4}X) | \b(\d{2,4}) ) \b /xsPerl演示:
perl -E "say join',','foo 123 bar 345X 44 33X' =~ /(?| .*? (\d{2,4}X) | (\d{2,4}) (?!X) )/xs;"
345X发布于 2011-07-07 10:57:48
你为什么不把他们全抓起来呢?用其他的方法来代替吗?
https://stackoverflow.com/questions/6609473
复制相似问题