www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - RegExp

reply DF <deefriend yahoo.com> writes:
/**
 * RegExp test.
 */
import std.regexp;
import std.stdio;

void main() {
	string someString = "Hello world!";
	auto regExp = new RegExp(r"[wW]orld");
	auto result = regExp.search(someString);
	//int k = regExp.test(someString);
	if (result is null) {
		writefln("Not found!");
	} else {
		writefln("Result:" ~ result[0]);
	}
}

This code never writes the searched part, until we uncomment the line with
test() method call, though there is a word matching the pattern. Why?
Oct 15 2008
parent reply Sergey Gromov <snake.scaly gmail.com> writes:
Wed, 15 Oct 2008 18:01:04 -0400,
DF wrote:
 /**
  * RegExp test.
  */
 import std.regexp;
 import std.stdio;
 
 void main() {
 	string someString = "Hello world!";
 	auto regExp = new RegExp(r"[wW]orld");
 	auto result = regExp.search(someString);
 	//int k = regExp.test(someString);
 	if (result is null) {
 		writefln("Not found!");
 	} else {
 		writefln("Result:" ~ result[0]);
 	}
 }
 
 This code never writes the searched part, until we uncomment the line with
test() method call, though there is a word matching the pattern. Why?

It shouldn't. search() prepares the regexp for use in foreach loop. The correct function for you is find: import std.regexp; import std.stdio; void main() { string someString = "Hello world!"; auto regExp = new RegExp(r"[wW]orld"); auto result = regExp.find(someString); if (result == -1) { writefln("Not found!"); } else { writefln("Result:" ~ regExp[0]); } }
Oct 15 2008
parent DF <deefriend yahoo.com> writes:
Sergey Gromov Wrote:

 Wed, 15 Oct 2008 18:01:04 -0400,
 DF wrote:
 /**
  * RegExp test.
  */
 import std.regexp;
 import std.stdio;
 
 void main() {
 	string someString = "Hello world!";
 	auto regExp = new RegExp(r"[wW]orld");
 	auto result = regExp.search(someString);
 	//int k = regExp.test(someString);
 	if (result is null) {
 		writefln("Not found!");
 	} else {
 		writefln("Result:" ~ result[0]);
 	}
 }
 
 This code never writes the searched part, until we uncomment the line with
test() method call, though there is a word matching the pattern. Why?

It shouldn't. search() prepares the regexp for use in foreach loop. The correct function for you is find: import std.regexp; import std.stdio; void main() { string someString = "Hello world!"; auto regExp = new RegExp(r"[wW]orld"); auto result = regExp.find(someString); if (result == -1) { writefln("Not found!"); } else { writefln("Result:" ~ regExp[0]); } }

Oct 15 2008