www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Regex replace followed by number.

So I have ran into an issue where I want to replace a string with 
regex.

but i cant figure out how to replace items followed by a number.

i use "$1001" to do paste first match but this thinks I'm trying 
using match 1001
but if i try ${1}001 it gives me an error saying that it cant 
match the other "}"

perhaps D uses a different syntax but i couldn't find any 
documentation on the replace side.


The following code renames files.
arg 1 - path
arg 2 - regex match
arg 3 - regex replace

----------------------
import std.file;
import std.path;
import std.regex;
import std.range;
import std.stdio:writeln;

void main(string[] args){
	
	bool preview;
	Regex!char myreg;
	string replacment;
	
	if(!args[1].buildNormalizedPath.isValidPath){writeln("Path is 
invalid! ");   return;}
	try{myreg       = regex(args[2]);}
	    catch(RegexException e)                   {writeln("Invalid 
Regex command");return;}
	try{replacment  = args[3];}
	    catch(Exception e)                 {writeln("Needs 
replacment string");return;}
	if(args.length < 5){
		preview  = true;
		writeln("result is preview only add extra arg for action");
	}else{preview  = false;}

	size_t longest=0;
	foreach (string name; 
dirEntries(buildNormalizedPath(args[1].driveName(),args[1].stripDrive()) ,
SpanMode.shallow))
	{
		if(name.isFile){
			longest = (longest>name.baseName.length) ? longest : 
name.length;
		}
	}
	
	foreach (string name; 
dirEntries(buildNormalizedPath(args[1].driveName(),args[1].stripDrive()) ,
SpanMode.shallow))
	{
		if(name.isFile){
			if(preview){
				writeln("From:",name.baseName," 
".repeat(longest-name.baseName.length).join,"to:",replaceAll(name.baseName,
myreg,replacment ));
			}else{
				std.file.rename(name,replaceAll(name, myreg,replacment ));
		    }
		}
	}
}
-----------------------------------------
Jun 01 2016