regex 1.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.ruby +43 -0
- data/.yardopts +8 -0
- data/COPYING.rdoc +31 -0
- data/{HISTORY → HISTORY.rdoc} +12 -0
- data/{README → README.rdoc} +18 -8
- data/lib/regex.rb +7 -6
- data/lib/regex.yml +43 -0
- data/lib/regex/extractor.rb +33 -10
- data/lib/regex/replacer.rb +51 -11
- data/lib/regex/templates.rb +35 -5
- data/man/man1/regex.1 +106 -0
- data/man/man1/regex.1.html +170 -0
- data/man/man1/regex.1.ronn +97 -0
- data/qed/00_intro.rdoc +2 -0
- data/qed/cli/applique/env.rb +19 -0
- data/qed/cli/replace.rdoc +26 -0
- data/qed/cli/search.rdoc +31 -0
- data/qed/regex.rdoc +5 -6
- data/qed/replacer.rdoc +2 -2
- metadata +65 -81
- data/LICENSE +0 -204
- data/PACKAGE +0 -7
- data/PROFILE +0 -20
- data/lib/regex/package.yml +0 -7
data/.ruby
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
---
|
2
|
+
source:
|
3
|
+
- meta
|
4
|
+
authors:
|
5
|
+
- name: Thomas Sawyer
|
6
|
+
email: transfire@gmail.com
|
7
|
+
- name: Tyler Rick
|
8
|
+
copyrights: []
|
9
|
+
replacements: []
|
10
|
+
alternatives: []
|
11
|
+
requirements:
|
12
|
+
- name: detroit
|
13
|
+
groups:
|
14
|
+
- build
|
15
|
+
development: true
|
16
|
+
- name: qed
|
17
|
+
groups:
|
18
|
+
- test
|
19
|
+
development: true
|
20
|
+
dependencies: []
|
21
|
+
conflicts: []
|
22
|
+
repositories:
|
23
|
+
- uri: git://github.com/proutils/regex.git
|
24
|
+
scm: git
|
25
|
+
name: upstream
|
26
|
+
resources:
|
27
|
+
Website: http://rubyworks.github.com/regex
|
28
|
+
User Guide: http://wiki.github.com/rubyworks/regex
|
29
|
+
Source Code: http://github.com/rubyworks/regex
|
30
|
+
Mailing List: http://groups.google.com/group/rubyworks-mailinglist
|
31
|
+
extra: {}
|
32
|
+
load_path:
|
33
|
+
- lib
|
34
|
+
revision: 0
|
35
|
+
created: '2006-05-09'
|
36
|
+
summary: Regex is a simple commmand-line Regular Expression tool.
|
37
|
+
title: Regex
|
38
|
+
version: 1.1.1
|
39
|
+
name: regex
|
40
|
+
description: ! 'Regex is a simple commmand-line Regular Expression tool
|
41
|
+
|
42
|
+
that makes it easy to search documents for content matches.'
|
43
|
+
date: '2011-10-24'
|
data/.yardopts
ADDED
data/COPYING.rdoc
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
= COPYRIGHT NOTICES
|
2
|
+
|
3
|
+
== Regex
|
4
|
+
|
5
|
+
Copyright:: (c) 2010 Thomas Sawyer, Rubyworks
|
6
|
+
License:: BSD-2-Clause
|
7
|
+
Website:: http://rubyworks.github.com/tapout
|
8
|
+
|
9
|
+
Copyright 2010 Thomas Sawyer. All rights reserved.
|
10
|
+
|
11
|
+
Redistribution and use in source and binary forms, with or without
|
12
|
+
modification, are permitted provided that the following conditions are met:
|
13
|
+
|
14
|
+
1. Redistributions of source code must retain the above copyright notice,
|
15
|
+
this list of conditions and the following disclaimer.
|
16
|
+
|
17
|
+
2. Redistributions in binary form must reproduce the above copyright
|
18
|
+
notice, this list of conditions and the following disclaimer in the
|
19
|
+
documentation and/or other materials provided with the distribution.
|
20
|
+
|
21
|
+
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
22
|
+
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
23
|
+
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
24
|
+
COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
25
|
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
26
|
+
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
27
|
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
28
|
+
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
29
|
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
30
|
+
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
31
|
+
|
data/{HISTORY → HISTORY.rdoc}
RENAMED
@@ -1,5 +1,17 @@
|
|
1
1
|
= RELEASE HISTORY
|
2
2
|
|
3
|
+
== 1.1.1 / 2011-10-24
|
4
|
+
|
5
|
+
Maintenance release updates build configuration. This release
|
6
|
+
also adds a man-page and fixes one bug with single search output.
|
7
|
+
|
8
|
+
Changes:
|
9
|
+
|
10
|
+
* Modernize build configuration.
|
11
|
+
* Fix return value when no single match is found.
|
12
|
+
* Add man-page for help.
|
13
|
+
|
14
|
+
|
3
15
|
== 1.1.0 / 2010-10-12
|
4
16
|
|
5
17
|
This release adds a detailed output option, and corrects
|
data/{README → README.rdoc}
RENAMED
@@ -18,8 +18,9 @@ well. Well that's what you get.
|
|
18
18
|
|
19
19
|
== RESOURCES
|
20
20
|
|
21
|
-
* Home
|
22
|
-
* Code
|
21
|
+
* {Home}[http://rubyworks.github.com/regex]
|
22
|
+
* {Code}[http://github.com/rubyworks/regex]
|
23
|
+
* {Mail}[http://groups.google.com/groups/rubyworks-mailinglist]
|
23
24
|
|
24
25
|
|
25
26
|
== USAGE
|
@@ -81,14 +82,23 @@ Check out the <code>--help</code> and I am sure the rest will be smooth sailing.
|
|
81
82
|
But it you want more information, then do us the good favor of jumping over
|
82
83
|
to the wiki[http://wiki.github.com/rubyworks/regex].
|
83
84
|
|
85
|
+
|
86
|
+
== OUTPUT
|
87
|
+
|
88
|
+
Regex has three output modes. YAML, JSON and standard text. The standard
|
89
|
+
text output is unique in that it utilizes special ASCII characters
|
90
|
+
to separate matches and regex groups. ASCII 29, called the *record separator*,
|
91
|
+
is used to separate repeat matches. ASCII 30, called the *group separator*, is
|
92
|
+
is used to separate regular expression groups.
|
93
|
+
|
94
|
+
|
84
95
|
== STATUS
|
85
96
|
|
86
|
-
|
87
|
-
or that every detail is going to work
|
88
|
-
or a feature needs adding, well then get
|
89
|
-
source software is built on *TEAM WORK*,
|
97
|
+
The project is maturing but still a touch wet behnd the years. So don't be too surprised if
|
98
|
+
it doesn't have every feature under the sun just yet, or that every detail is going to work
|
99
|
+
absolutely peachy. But hey, if something needs fixing or a feature needs adding, well then get
|
100
|
+
in there and send me a patch. Open source software is built on *TEAM WORK*, right?
|
90
101
|
|
91
|
-
Expect a potenial for rapid change here at the beginning.
|
92
102
|
|
93
103
|
== COPYRIGHT
|
94
104
|
|
@@ -96,5 +106,5 @@ Copyright (c) 2010 Thomas Sawyer
|
|
96
106
|
|
97
107
|
Regex is licensed under the terms of the Apache License, Version 2.0.
|
98
108
|
|
99
|
-
See
|
109
|
+
See COPYING.rdoc file for details.
|
100
110
|
|
data/lib/regex.rb
CHANGED
@@ -1,19 +1,20 @@
|
|
1
1
|
module Regex
|
2
|
-
DIRECTORY = File.dirname(__FILE__)
|
3
|
-
|
4
2
|
# Access to PACAKGE metadata.
|
5
|
-
def self.
|
6
|
-
@
|
3
|
+
def self.metadata
|
4
|
+
@metadata ||= (
|
7
5
|
require 'yaml'
|
8
|
-
YAML.load(File.new(
|
6
|
+
YAML.load(File.new(File.dirname(__FILE__) + '/regex.yml'))
|
9
7
|
)
|
10
8
|
end
|
11
9
|
|
12
10
|
# Need VRESION? You got it.
|
13
11
|
def self.const_missing(name)
|
14
|
-
|
12
|
+
metadata[name.to_s.downcase] || super(name)
|
15
13
|
end
|
16
14
|
|
15
|
+
# TODO: This is only here to support broken Ruby 1.8.x.
|
16
|
+
VERSION = metadata['version']
|
17
|
+
|
17
18
|
# Shortcut to create a new Regex::Extractor instance.
|
18
19
|
def self.new(*io)
|
19
20
|
Extractor.new(*io)
|
data/lib/regex.yml
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
---
|
2
|
+
source:
|
3
|
+
- meta
|
4
|
+
authors:
|
5
|
+
- name: Thomas Sawyer
|
6
|
+
email: transfire@gmail.com
|
7
|
+
- name: Tyler Rick
|
8
|
+
copyrights: []
|
9
|
+
replacements: []
|
10
|
+
alternatives: []
|
11
|
+
requirements:
|
12
|
+
- name: detroit
|
13
|
+
groups:
|
14
|
+
- build
|
15
|
+
development: true
|
16
|
+
- name: qed
|
17
|
+
groups:
|
18
|
+
- test
|
19
|
+
development: true
|
20
|
+
dependencies: []
|
21
|
+
conflicts: []
|
22
|
+
repositories:
|
23
|
+
- uri: git://github.com/proutils/regex.git
|
24
|
+
scm: git
|
25
|
+
name: upstream
|
26
|
+
resources:
|
27
|
+
Website: http://rubyworks.github.com/regex
|
28
|
+
User Guide: http://wiki.github.com/rubyworks/regex
|
29
|
+
Source Code: http://github.com/rubyworks/regex
|
30
|
+
Mailing List: http://groups.google.com/group/rubyworks-mailinglist
|
31
|
+
extra: {}
|
32
|
+
load_path:
|
33
|
+
- lib
|
34
|
+
revision: 0
|
35
|
+
created: '2006-05-09'
|
36
|
+
summary: Regex is a simple commmand-line Regular Expression tool.
|
37
|
+
title: Regex
|
38
|
+
version: 1.1.1
|
39
|
+
name: regex
|
40
|
+
description: ! 'Regex is a simple commmand-line Regular Expression tool
|
41
|
+
|
42
|
+
that makes it easy to search documents for content matches.'
|
43
|
+
date: '2011-10-24'
|
data/lib/regex/extractor.rb
CHANGED
@@ -16,6 +16,9 @@ module Regex
|
|
16
16
|
# the record deliminator. This is the default value.
|
17
17
|
DELIMINATOR_RECORD = 30.chr + "\n"
|
18
18
|
|
19
|
+
# TODO: Separate by file ?
|
20
|
+
# DELIMINATOR_FILE = 28.chr +" \n"
|
21
|
+
|
19
22
|
#
|
20
23
|
def self.input_cache(input)
|
21
24
|
@input_cache ||= {}
|
@@ -41,6 +44,9 @@ module Regex
|
|
41
44
|
# Select built-in regular expression by name.
|
42
45
|
attr_accessor :template
|
43
46
|
|
47
|
+
# Is a recusive serach?
|
48
|
+
attr_accessor :recursive
|
49
|
+
|
44
50
|
# Index of expression return.
|
45
51
|
attr_accessor :index
|
46
52
|
|
@@ -53,7 +59,7 @@ module Regex
|
|
53
59
|
# Escape expression.
|
54
60
|
attr_accessor :escape
|
55
61
|
|
56
|
-
# Repeat Match.
|
62
|
+
# Repeat Match (global).
|
57
63
|
attr_accessor :repeat
|
58
64
|
|
59
65
|
# Output format.
|
@@ -263,7 +269,7 @@ module Regex
|
|
263
269
|
|
264
270
|
# Structure the matchdata for single match.
|
265
271
|
def structure_single
|
266
|
-
structure_repeat.first
|
272
|
+
structure_repeat.first || []
|
267
273
|
end
|
268
274
|
|
269
275
|
# Structure the matchdata for repeat matches.
|
@@ -281,9 +287,14 @@ module Regex
|
|
281
287
|
def scan
|
282
288
|
list = []
|
283
289
|
io.each do |input|
|
284
|
-
text
|
285
|
-
|
286
|
-
|
290
|
+
# TODO: limit to text files, how?
|
291
|
+
begin
|
292
|
+
text = read(input)
|
293
|
+
text.scan(regex) do
|
294
|
+
list << Match.new(input, $~)
|
295
|
+
end
|
296
|
+
rescue => err
|
297
|
+
warn(input.inspect + ' ' + err.to_s) if $VERBOSE
|
287
298
|
end
|
288
299
|
end
|
289
300
|
list
|
@@ -333,6 +344,12 @@ module Regex
|
|
333
344
|
opt.on('--search', '-s PATTERN', "search for regular expression") do |re|
|
334
345
|
options[:pattern] = re
|
335
346
|
end
|
347
|
+
opt.on('--recursive', '-R', 'search recursively though subdirectories') do
|
348
|
+
options[:recursive] = true
|
349
|
+
end
|
350
|
+
opt.on('--escape', '-e', 'make all patterns verbatim string matchers') do
|
351
|
+
options[:escape] = true
|
352
|
+
end
|
336
353
|
opt.on('--index', '-n INT', "return a specific match index") do |int|
|
337
354
|
options[:index] = int.to_i
|
338
355
|
end
|
@@ -387,11 +404,17 @@ module Regex
|
|
387
404
|
end
|
388
405
|
end
|
389
406
|
|
390
|
-
files =
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
407
|
+
files = []
|
408
|
+
argv.each do |file|
|
409
|
+
if File.directory?(file)
|
410
|
+
if options[:recursive]
|
411
|
+
rec_files = Dir[File.join(file, '**')].reject{ |d| File.directory?(d) }
|
412
|
+
files.concat(rec_files)
|
413
|
+
end
|
414
|
+
elsif File.file?(file)
|
415
|
+
files << file
|
416
|
+
else
|
417
|
+
$stderr.puts "Not a file -- '#{file}'."
|
395
418
|
exit 1
|
396
419
|
end
|
397
420
|
end
|
data/lib/regex/replacer.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'stringio'
|
2
|
+
require 'optparse'
|
2
3
|
|
3
4
|
module Regex
|
4
5
|
|
@@ -8,6 +9,9 @@ module Regex
|
|
8
9
|
# Array of [search, replace] rules.
|
9
10
|
attr_reader :rules
|
10
11
|
|
12
|
+
# Is this a recursive search?
|
13
|
+
attr_accessor :recursive
|
14
|
+
|
11
15
|
# Make all patterns exact string matchers.
|
12
16
|
attr_accessor :escape
|
13
17
|
|
@@ -23,6 +27,9 @@ module Regex
|
|
23
27
|
# Make backups of files when they change.
|
24
28
|
attr_accessor :backup
|
25
29
|
|
30
|
+
# Interactive replacement.
|
31
|
+
attr_accessor :interactive
|
32
|
+
|
26
33
|
#
|
27
34
|
def initialize(options={})
|
28
35
|
@rules = []
|
@@ -40,12 +47,16 @@ module Regex
|
|
40
47
|
def apply(*ios)
|
41
48
|
ios.each do |io|
|
42
49
|
original = (IO === io || StringIO === io ? io.read : io.to_s)
|
43
|
-
generate = original
|
50
|
+
generate = original.to_s
|
44
51
|
rules.each do |(pattern, replacement)|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
52
|
+
begin
|
53
|
+
if pattern.global
|
54
|
+
generate = generate.gsub(pattern.to_re, replacement)
|
55
|
+
else
|
56
|
+
generate = generate.sub(pattern.to_re, replacement)
|
57
|
+
end
|
58
|
+
rescue => err
|
59
|
+
warn(io.inspect + ' ' + err.to_s) if $VERBOSE
|
49
60
|
end
|
50
61
|
end
|
51
62
|
if original != generate
|
@@ -54,6 +65,20 @@ module Regex
|
|
54
65
|
end
|
55
66
|
end
|
56
67
|
|
68
|
+
#
|
69
|
+
# TODO: interactive mode needs to handle \1 style substitutions.
|
70
|
+
def interactive_gsub(string, pattern, replacement)
|
71
|
+
copy = string.dup
|
72
|
+
string.scan(pattern) do |match|
|
73
|
+
print "#{match} ? (Y/n)"
|
74
|
+
case ask
|
75
|
+
when 'y', 'Y', ''
|
76
|
+
copy[$~.begin(0)..$~.end(0)] = replacement
|
77
|
+
else
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
57
82
|
private
|
58
83
|
|
59
84
|
# Parse pattern matcher.
|
@@ -92,7 +117,7 @@ module Regex
|
|
92
117
|
replaces = []
|
93
118
|
options = {}
|
94
119
|
parser = OptionParser.new do |opt|
|
95
|
-
opt.on('--
|
120
|
+
opt.on('--search', '-s PATTERN', 'search portion of substitution') do |search|
|
96
121
|
searches << search
|
97
122
|
end
|
98
123
|
opt.on('--template', '-t NAME', 'search for built-in regular expression') do |name|
|
@@ -101,7 +126,10 @@ module Regex
|
|
101
126
|
opt.on('--replace', '-r STRING', 'replacement string of substitution') do |replace|
|
102
127
|
replaces << replace
|
103
128
|
end
|
104
|
-
opt.on('--
|
129
|
+
opt.on('--recursive', '-R', 'search recursively though subdirectories') do
|
130
|
+
options[:recursive] = true
|
131
|
+
end
|
132
|
+
opt.on('--escape', '-e', 'make all patterns verbatim string matchers') do
|
105
133
|
options[:escape] = true
|
106
134
|
end
|
107
135
|
opt.on('--insensitive', '-i', 'make all patterns case-insensitive matchers') do
|
@@ -119,7 +147,10 @@ module Regex
|
|
119
147
|
opt.on('-b', '--backup', 'backup any files that are changed') do
|
120
148
|
options[:backup] = true
|
121
149
|
end
|
122
|
-
opt.
|
150
|
+
opt.on('-i', '--interactive', 'interactive mode') do
|
151
|
+
options[:interactive] = true
|
152
|
+
end
|
153
|
+
opt.on_tail('--debug', 'run in debug mode') do
|
123
154
|
$DEBUG = true
|
124
155
|
end
|
125
156
|
opt.on_tail('--help', '-h', 'display this lovely help message') do
|
@@ -129,10 +160,19 @@ module Regex
|
|
129
160
|
end
|
130
161
|
parser.parse!(argv)
|
131
162
|
|
132
|
-
files =
|
133
|
-
|
163
|
+
files = []
|
164
|
+
|
165
|
+
argv.each{ |file|
|
134
166
|
raise "file does not exist -- #{file}" unless File.exist?(file)
|
135
|
-
|
167
|
+
if File.directory?(file)
|
168
|
+
if options[:recursive]
|
169
|
+
files.concat Dir[File.join(file, '**')].reject{ |d| File.directory?(d) }
|
170
|
+
end
|
171
|
+
else
|
172
|
+
files << file
|
173
|
+
end
|
174
|
+
}
|
175
|
+
|
136
176
|
targets = files.empty? ? [ARGF] : files.map{ |f| File.new(f) }
|
137
177
|
|
138
178
|
unless searches.size == replaces.size
|
data/lib/regex/templates.rb
CHANGED
@@ -3,8 +3,9 @@ module Regex
|
|
3
3
|
# = Templates
|
4
4
|
#
|
5
5
|
# TODO: What about regular expressions with variable content?
|
6
|
-
#
|
7
|
-
#
|
6
|
+
# But then how would we handle named substituions?
|
7
|
+
#
|
8
|
+
# TODO: Should these be methods rather than constants?
|
8
9
|
module Templates
|
9
10
|
|
10
11
|
# Empty line.
|
@@ -13,6 +14,7 @@ module Regex
|
|
13
14
|
# Blank line.
|
14
15
|
BLANK = /^\s*$/
|
15
16
|
|
17
|
+
#
|
16
18
|
NUMBER = /[-+]?[0-9]*\.?[0-9]+/
|
17
19
|
|
18
20
|
# Markup language tag, e.g \<a>stuff</a>.
|
@@ -21,8 +23,8 @@ module Regex
|
|
21
23
|
# IPv4 Address
|
22
24
|
IPV4 = /\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/
|
23
25
|
|
24
|
-
#
|
25
|
-
|
26
|
+
# Dni (spanish ID card)
|
27
|
+
DNI = /^\d{8}[A-Za-z]{1}$/
|
26
28
|
|
27
29
|
# Email Address
|
28
30
|
EMAIL = /([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)/i
|
@@ -51,6 +53,34 @@ module Regex
|
|
51
53
|
# HTTP URL Address
|
52
54
|
HTTP = /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \?=.-]*)*\/?$/
|
53
55
|
|
56
|
+
# Validates Credit Card numbers, contains 16 numbers in groups of 4 separated
|
57
|
+
# by `-`, space or nothing.
|
58
|
+
CREDITCARD = /^(\d{4}-){3}\d{4}$|^(\d{4}\s){3}\d{4}$|^\d{16}$/
|
59
|
+
|
60
|
+
# MasterCard credit card
|
61
|
+
MASTERCARD = /^5[1-5]\d{14}$/
|
62
|
+
|
63
|
+
# Visa credit card.
|
64
|
+
VISA = /^4\d{15}$/
|
65
|
+
|
66
|
+
# TODO: Better name?
|
67
|
+
UNIXWORD = /^[a-zA-Z0-9_]*$/
|
68
|
+
|
69
|
+
# Username, at lest 3 characters and no more than 16.
|
70
|
+
USERNAME = /^[a-zA-Z0-9_]{3,16}$/
|
71
|
+
|
72
|
+
# Twitter username
|
73
|
+
TWITTER_USERNMAE = /^([a-z0-9\_])+$/ix
|
74
|
+
|
75
|
+
# Github username
|
76
|
+
GITHUB_USERNAME = /^([a-z0-9\_\-])+$/ix
|
77
|
+
|
78
|
+
# Slideshare username
|
79
|
+
SLIDESHARE_USERNAME = /^([a-z0-9])+$/ix
|
80
|
+
|
81
|
+
# Del.icio.us username
|
82
|
+
DELICIOUS_USERNMAME = /^([a-z0-9\_\-])+$/ix
|
83
|
+
|
54
84
|
# Ruby comment block.
|
55
85
|
RUBYBLOCK = /^=begin\s*(.*?)\n(.*?)\n=end/m
|
56
86
|
|
@@ -58,7 +88,7 @@ module Regex
|
|
58
88
|
# TODO: Not quite right.
|
59
89
|
RUBYMETHOD_WITH_COMMENT = /(^\ *\#.*?)^\s*def\s*(.*?)$/m
|
60
90
|
|
61
|
-
#
|
91
|
+
# Ruby method definition.
|
62
92
|
RUBYMETHOD = /^\ *def\s*(.*?)$/
|
63
93
|
|
64
94
|
# By the legendary abigail. Fails to match if and only if it is matched against
|