Popularity
4.1
Declining
Activity
0.0
Declining
11
1
2

Monthly Downloads: 85
Programming language: Haskell
License: Apache License 2.0
Tags: Text    

pcre2 alternatives and similar packages

Based on the "Text" category.
Alternatively, view pcre2 alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of pcre2 or a related project?

Add another 'Text' Package

README

pcre2

Regular expressions for Haskell.

Teasers

embeddedLicensePlate :: Text -> Maybe Text
embeddedLicensePlate = match "[A-Z]{3}[0-9]{3,4}"
case "The quick brown fox" of
    [regex|brown\s+(?<animal>\S+)|] -> Text.putStrLn animal
    _                               -> error "nothing brown"
let kv'd = lined . packed . [_regex|^\s*(.*?)\s*[=:]\s*(.*)|]

forMOf kv'd file $ execStateT $ do
    k <- gets $ capture @1
    v <- gets $ capture @2
    liftIO $ Text.putStrLn $ "found " <> k <> " set to " <> v

    case myMap ^. at k of
        Just v' | v /= v' -> do
            liftIO $ Text.putStrLn $ "setting " <> k <> " to " <> v'
            _capture @2 .= v'
        _ -> liftIO $ Text.putStrLn "no change"

Features

  • Low-surface API covering most use cases.
  • Quiet functions with simple types—for the most part it's
    Text (pattern) -> Text (subject) -> result.
  • Use partial application to create performant, compile-once-match-many code.
  • Low cognitive overhead—there's just one custom datatype for both compile and match options, the Option monoid.
  • Text everywhere for interop with both C and the broader Haskell ecosystem.
  • Match failures expressed via Alternative or pattern match failures.
  • Opt-in Template Haskell facilities for compile-time verification of patterns, indexing captures, and memoizing inline regexes.
  • Opt-in lens support.
  • No failure monads to express compile errors, preferring pure functions and throwing imprecise exceptions with pretty Show instances. Write simple code and debug it. Or, don't, and use the Template Haskell features instead. Both are first-class.
  • Vast presentation of PCRE2 functionality. We can even register Haskell callbacks to run during matching!
  • No dependencies that aren't distributed with GHC.
  • Bundled, statically-linked UTF-16 build of up-to-date PCRE2 (version 10.35), with a complete, exposed Haskell binding.

TODO

  • Global matching. (We already have global substitution.)
  • Many performance optimizations. Currently we are 2–3× slower than other libraries doing everything (a few μs).
  • Make use of DFA and JIT compilation.
  • Establish automated builds.
  • Improve PCRE2 C compile time.
  • PCRE2 10.36 is out already.

License

Apache 2.0.
PCRE2 is distributed under the 3-clause BSD license.

Author

©2020 Shlomo Shuck


*Note that all licence references and agreements mentioned in the pcre2 README section above are relevant to that project's source code only.