import "Prelude" hiding (group) importJava "java.util.regex.Pattern" where data Pattern compile :: String -> Pattern matcher :: Pattern -> String -> Matcher importJava "java.util.regex.Matcher" where data Matcher """ Attempts to match the entire region against the pattern. """ matches :: Matcher -> Boolean """ Returns the input subsequence matched by the previous match. """ group :: Matcher -> String """ Returns the number of capturing groups in this matcher's pattern. """ groupCount :: Matcher -> Integer """ Returns the input subsequence captured by the given group during the previous match operation. """ @JavaName group groupNr :: Matcher -> Integer -> Maybe String """ Returns the input subsequence captured by the given named group during the previous match operation. """ @JavaName group groupNm :: Matcher -> String -> Maybe String """ Attempts to find the next subsequence of the input sequence that matches the pattern. """ @JavaName find matcherFind :: Matcher -> Boolean appendReplacement :: Matcher -> StringBuffer -> String -> Matcher appendTail :: Matcher -> StringBuffer -> StringBuffer @JavaName replaceAll replaceAll_ :: Matcher -> String -> String @JavaName replaceFirst replaceFirst_ :: Matcher -> String -> String quoteReplacement :: String -> String importJava "java.lang.StringBuffer" where data StringBuffer @JavaName "" newStringBuffer :: () -> StringBuffer @JavaName toString freezeStringBuffer :: StringBuffer -> String import "IterN" """ Get parts matched by each group in the pattern, if a match is found. """ matchGroups :: Pattern -> String -> Maybe [Maybe String] matchGroups p s = runProc $ if matches m then Just $ mapN (\i -> groupNr m (i+1)) (groupCount m) else Nothing where m = matcher p s """ `replaceAll pattern replacement text` replaces all matches of `pattern` in the `text` by `replacement`. """ replaceAll :: String -> String -> String -> String replaceAll pattern replacement text = replaceAll_ (matcher (compile pattern) text) replacement """ `replaceFirst pattern replacement text` replaces the first match of `pattern` in the `text` by `replacement`. """ replaceFirst :: String -> String -> String -> String replaceFirst pattern replacement text = replaceFirst_ (matcher (compile pattern) text) replacement """ `substituteAll pattern f text` replaces all matches of `pattern` in the `text` by the string returned by `f` given the matched region of the string as a parameter. """ substituteAll :: String -> (String -> String) -> String -> String substituteAll pattern f text = runProc do m = matcher (compile pattern) text buf = newStringBuffer () while (matcherFind m) do appendReplacement m buf $ f $ group m appendTail m buf freezeStringBuffer buf """ `substituteFirst pattern f text` replaces the first match of `pattern` in the `text` by the string returned by `f` given the matched region of the string as a parameter. """ substituteFirst :: String -> (String -> String) -> String -> String substituteFirst pattern f text = runProc do m = matcher (compile pattern) text if (matcherFind m) then do buf = newStringBuffer () appendReplacement m buf $ f $ group m appendTail m buf freezeStringBuffer buf else text importJava "java.lang.String" where """ `substring string beginIndex` Returns a string that is a substring of given string. The substring begins with the character at the specified index and extends to the end of the string. """ @JavaName substring substring :: String -> Integer -> String """ `substringl string beginIndex endIndex` Returns a string that is a substring of given string. The substring begins at the specified `beginIndex` and extends to the character at index `endIndex - 1`. Thus the length of the substring is endIndex-beginIndex. """ @JavaName substring substringl :: String -> Integer -> Integer -> String