Regular expressions: Difference between revisions

Content added Content deleted
m (Fixed lang tags.)
(→‎{{header|Raven}}: Added REBOL example.)
Line 512: Line 512:


<lang raven>str r/ a / another / print</lang>
<lang raven>str r/ a / another / print</lang>

=={{header|REBOL}}==
<lang REBOL>REBOL [
Title: "Regular Expression Matching"
Author: oofoe
Date: 2009-12-06
URL: http://rosettacode.org/wiki/Regular_expression_matching
]

string: "This is a string."

; REBOL doesn't use a conventional Perl-compatible regular expression
; syntax. Instead, it uses a variant Parsing Expression Grammar with
; the 'parse' function. It's also not limited to just strings. You can
; define complex grammars that actually parse and execute program
; files.

; Here, I provide a rule to 'parse' that specifies searching through
; the string until "string." is found, then the end of the string. If
; the subject string satisfies the rule, the expresion will be true.

if parse string [thru "string." end] [
print "Subject ends with 'string.'"]

; For replacment, I take advantage of the ability to call arbitrary
; code when a pattern is matched -- everything in the parens will be
; executed when 'to " a "' is satisfied. This marks the current string
; location, then removes the offending word and inserts the replacement.

parse string [
to " a " ; Jump to target.
mark: (
remove/part mark 3 ; Remove target.
mark: insert mark " another " ; Insert replacement.
)
:mark ; Pick up where I left off.
]
print [crlf "Parse replacement:" string]

; For what it's worth, the above operation is more conveniently done
; with the 'replace' function:

replace string " another " " a " ; Change string back.
print [crlf "Replacement:" string]</lang>

Output:

<pre>Subject ends with 'string.'

Parse replacement: This is another string.

Replacement: This is a string.</pre>


=={{header|Ruby}}==
=={{header|Ruby}}==