Code Monkey home page Code Monkey logo

textquery's Introduction

TextQuery

Does it match? When regular expressions are not enough, textquery is the answer. For example, regular expressions cannot evaluate recursive rules and often result in overly verbose and complicated expressions.

Textquery is a simple PEG grammar with support for:

  • AND (spaces are implicit AND's)
  • OR
  • NOT (- is an alias)
  • 'quoted strings'
  • fuzzy matching
  • case (in)sensitive
  • attribute tags (e.g. surname:Smith)
  • custom delimiters (default is whitespace for words, : for attributes)

TextQuery in the wild: PostRank, PaperTrail, and others!

Example

TextQuery.new("'to be' OR NOT 'to_be'").match?("to be")   # => true

TextQuery.new("-test").match?("some string of text")      # => true
TextQuery.new("NOT test").match?("some string of text")   # => true

TextQuery.new("a AND b").match?("b a")                    # => true
TextQuery.new("a AND b").match?("a c")                    # => false

q = TextQuery.new("a AND (b AND NOT (c OR d))")
q.match?("d a b")                                         # => false
q.match?("b")                                             # => false
q.match?("a b cdefg")                                     # => true

TextQuery.new("a~").match?("adf")                         # => true
TextQuery.new("~a").match?("dfa")                         # => true
TextQuery.new("~a~").match?("daf")                        # => true
TextQuery.new("2~a~1").match?("edaf")                     # => true
TextQuery.new("2~a~2").match?("edaf")                     # => false

TextQuery.new("a", :ignorecase => true).match?("A b cD")  # => true

License

The MIT License - Copyright (c) 2011 Ilya Grigorik

textquery's People

Contributors

cjheath avatar dj2 avatar enricob avatar eric avatar igrigorik avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

textquery's Issues

Tests say AND should have precedence over OR, test doesn't test it, code doesn't do it.

Multiple things wrong here:

  1. The code uses simple left-to-right precedence, it doesn't favour either AND or OR:
    https://github.com/igrigorik/textquery/blob/master/lib/textquery/textquery_grammar.treetop#L8

  2. The comment in the test shows OR having greater precedence, contrary to the meaning of "precedence" (binds tighter) and to the established principle from maths and logic. AND is the logical analog of multiplication, OR of addition, so the precedence in other systems always nests brackets around AND groups in preference to OR, like in mathematics. See
    <https://github.com/igrigorik/textquery/blob/master/spec/textquery_spec.rb#L52

  3. The test doesn't actually test for AND taking precedence in any case.
    https://github.com/igrigorik/textquery/blob/master/spec/textquery_spec.rb#L51-60

A patch is forthcoming on my branch.

Can we make this jruby friendly?

By not requiring:

require 'active_support'
require 'oniguruma'

And not calling .mb_chars?

I'm sorry to say my hack for now, to test out this lib was to redefine RUBY_VERSION = 1.9 if jruby.

More shorthands?

Hi, I thought it would be cool to have more shorthands, like & for AND and / for OR. I've been playing with the source and managed to add such things easily.

My question is: is this a good idea? Or am I missing something? I could whip up the specs and send you a pull request if you like.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.