我正在尝试进行一个与字符(字母a-z或数字0-9字母)匹配的常规表达式,但只剩下4个字符。该字符串将始终如下所示:
1as3-4123-5fa12-4124-41aa-1123
我尝试了下一个常规表达式,但是它只返回第一个匹配项(在这种情况下为1as3)。如果我取出'-',它就可以正常工作,但是对于它们,我无法使其正常工作匹配不止一次。
/^\w{1,26}/g
我如何才能多次获得它?预先谢谢你!
答案 0 :(得分:1)
答案 1 :(得分:0)
如果您的意思是“他的字符串将总是看起来像这样”,因为它始终具有相同的长度,则可以使用character class并添加连字符,因为该字符与\w
不匹配,并且会仅匹配前四个1as3
。
或者如果您总是匹配26个字符,请使用^[\w-]{26}
。
如果您只想匹配字母a-z或数字0-9(包括-
,则可以使用^[a-z0-9-]{1,26}
,因为\w
还要匹配下划线和大写字符。
如果您只想匹配[a-z0-9]
而不匹配连字符,直到剩下4个字符[a-z0-9]
,则可以使用正向前行,该断言将断定右侧的字符是{{1}的4倍。 1}}在行[a-z0-9]
的末尾加上可选的-
:
答案 2 :(得分:0)
尝试以下模式:
import Data.Foldable(find)
nth :: Int -> [(Int, Int)] -> Int
nth n = get2ndIn2nd . findByIndex n
where
findByIndex n xs = find ((n ==) . fst) $ zip [1..] xs
get2ndIn2nd p
| (Just (_, (_, b))) <- p = b
| otherwise = error "Boo!"
它匹配连字符(-)后面的字母和数字组。由于前面没有连字符,因此将排除最后4个字符。
经过Regex101
测试