Regular expressions: Difference between revisions
Content added Content deleted
(→[[C plus plus|C++]]: linked boost; now logged in ...) |
|||
Line 85: | Line 85: | ||
String result = mat.replaceAll("modified"); // replace all matches against the pattern with "modified" |
String result = mat.replaceAll("modified"); // replace all matches against the pattern with "modified" |
||
// result is now "I am the modified string" |
// result is now "I am the modified string" |
||
==[[JavaScript]]== |
|||
[[Category:JavaScript]] |
|||
Test/Match |
|||
var subject = "Hello world!"; |
|||
// Two different ways to create the RegExp object |
|||
// Both examples use the exact same pattern... matching "hello" |
|||
var re_PatternToMatch = /Hello (World)/i; // creates a RegExp literal with case-insensitivity |
|||
var re_PatternToMatch2 = new RegExp("Hello (World)", "i"); |
|||
// Test for a match - return a bool |
|||
var isMatch = re_PatternToMatch.test(subject); |
|||
// Get the match details |
|||
// Returns an array with the match's details |
|||
// matches[0] == "Hello world" |
|||
// matches[1] == "world" |
|||
var matches = re_PatternToMatch2.exec(subject); |
|||
Substitute |
|||
var subject = "Hello world!"; |
|||
// Perform a string replacement |
|||
// newSubject == "Replaced!" |
|||
var newSubject = subject.replace(re_PatternToMatch, "Replaced"); |
|||
==[[Perl]]== |
==[[Perl]]== |
Revision as of 22:10, 25 January 2007
![Task](http://static.miraheze.org/rosettacodewiki/thumb/b/ba/Rcode-button-task-crushed.png/64px-Rcode-button-task-crushed.png)
You are encouraged to solve this task according to the task description, using any language you may know.
The goal of this task is
- to match a string against a regular expression
- to substitute part of a string using a regular expression
AppleScript
Libraries: Satimage.osax
try find text ".*string$" in "I am a string" with regexp on error message return message end try
try change "original" into "modified" in "I am the original string" with regexp on error message return message end try
C++
- Compiler: g++ 4.0.2
- Libraries: boost
#include <iostream> #include <string> #include <iterator> #include <boost/regex.hpp> int main() { boost::regex re(".* string$"); std::string s = "Hi, I am a string"; // match the complete string if (boost::regex_match(s, re)) std::cout << "The string matches.\n"; else std::cout << "Oops - not found?\n"; // match a substring boost::regex re2(" a.*a"); boost::smatch match; if (boost::regex_search(s, match, re2)) { std::cout << "Matched " << match.length() << " characters starting at " << match.position() << ".\n"; std::cout << "Matched character sequence: \"" << match.str() << "\"\n"; } else { std::cout << "Oops - not found?\n"; } // replace a substring std::string dest_string; boost::regex_replace(std::back_inserter(dest_string), s.begin(), s.end(), re2, "'m now a changed"); std::cout << dest_string << std::endl; }
Java
Java info: java version "1.5.0_06", Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05), Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode, sharing)
Test
String str = "I am a string"; if (str.matches(".*string$")) { System.out.println("ends with 'string'"); }
Substitute
String orig = "I am the original string"; Pattern pat = Pattern.compile("original"); // match "original" Matcher mat = pat.matcher(orig); // get the Matcher String result = mat.replaceAll("modified"); // replace all matches against the pattern with "modified" // result is now "I am the modified string"
JavaScript
Test/Match
var subject = "Hello world!"; // Two different ways to create the RegExp object // Both examples use the exact same pattern... matching "hello" var re_PatternToMatch = /Hello (World)/i; // creates a RegExp literal with case-insensitivity var re_PatternToMatch2 = new RegExp("Hello (World)", "i"); // Test for a match - return a bool var isMatch = re_PatternToMatch.test(subject); // Get the match details // Returns an array with the match's details // matches[0] == "Hello world" // matches[1] == "world" var matches = re_PatternToMatch2.exec(subject);
Substitute
var subject = "Hello world!"; // Perform a string replacement // newSubject == "Replaced!" var newSubject = subject.replace(re_PatternToMatch, "Replaced");
Perl
Interpreter: Perl v5.8.8
Test
$string = "I am a string"; if ($string =~ /string$/) { print "Ends with 'string'\n"; } if ($string !~ /^You/) { print "Does not start with 'You'\n"; }
Substitute
$string = "I am a string"; $string =~ s/ a / another /; # makes "I am a string" into "I am another string" print $string;
Test and Substitute
$string = "I am a string"; if ($string =~ s/\bam\b/was/) { # \b is a word border print "I was able to find and replace 'am' with 'was'\n"; }
Options
# add the following just after the last / for additional control # g = globaly (match as many as possible) # i = case-insensitive # s = treat all of $string as a single line (incase you have line breaks in the content) # m = multi-line (the expression is run on each line individually) $string =~ s/i/u/ig; # would change "I am a string" into "u am a strung"
PHP
Interpreter: PHP 5.2.0
$string = 'I am a string';
Test
if (preg_match('/string$/', $string)) { echo "Ends with 'string'\n"; }
Replace
$string = preg_replace('/\ba\b/', 'another', $string); echo "Found 'a' and replace it with 'another', resulting in this string: $string\n";
Ruby
Test
string="I am a string" puts "Ends with 'string'" if string[/string$/] puts "Does not start with 'You'" if !string[/^You/]
Substitute
puts string.gsub(/ a /,' another ') #or string[/a/]='another' puts string
Substitute using block
puts(string.gsub(/\bam\b/) do |match| puts "I found #{match}" #place "was" instead of the match "was" end)