Project

verbal

0.0
No commit activity in last 3 years
No release in over 3 years
Verbal Expressions is a library that makes constructing difficult regular expressions simple and easy!
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.3
~> 1.8
~> 2.14
>= 0
 Project Readme

Verbal

Build Status Gem Version

Overview

Verbal is a Ruby library that helps to construct difficult regular expressions. It's ported from the awesome JavaScript VerbalExpressions. Detailed documentation is available at rubydoc.

Getting started with the ruby gem.

Installation

$> gem install verbal
require 'verbal'

Examples

Here's a couple of simple examples to give an idea of how Verbal works:

Testing if we have a valid URL

# Create an example of how to test for correctly formed URLs
tester = Verbal.new do
  start_of_line
  find 'http'
  maybe 's'
  find '://'
  maybe 'www.'
  anything_but ' '
  end_of_line
end

# Create an example URL
test_url = "https://www.google.com"

# Use it just like a regular Ruby regex:
puts 'Hooray!  It works!' if tester.match(test_url)
puts 'This works too!' if tester =~ test_url

# Print the generated regex:
puts tester.source # => /^(?:http)(s)?(?::\/\/)(www\.)?([^\ ]*)$/i

Replacing strings

# Create a test string
replace_me = "Replace bird with a duck"

# Create an expression that seeks for word "bird"
expression = Verbal.new { find 'bird' }

# Execute the expression like a normal Regexp object
result = replace_me.gsub( expression, "duck" );

puts result # Outputs "Replace duck with a duck"

Capturing strings

# create expression
verbal = Verbal.new do
  capture { anything }
  find /\sby\s/
  capture { anything }
end
# match against test string
data = verbal.match('this is it by michael jackson')
puts data[1] # >> 'this is it'
puts data[2] # >> 'michael jackson'

Issues

  • I haven't yet ported the modifier code because Ruby Regexp handles modifiers a little differently.

Thanks!

Thank you to @jehna for coming up with the awesome original idea.

Thank you to @ryan-endacott for the original port.