[jboss-jira] [JBoss JIRA] Created: (JBRULES-855) Jboss regex does not support all escape sequence

Krishnan Sivaramakrishna Iyer (JIRA) jira-events at lists.jboss.org
Wed May 16 14:18:52 EDT 2007


Jboss regex does not support all escape sequence
------------------------------------------------

                 Key: JBRULES-855
                 URL: http://jira.jboss.com/jira/browse/JBRULES-855
             Project: JBoss Rules
          Issue Type: Bug
      Security Level: Public (Everyone can see)
    Affects Versions: 4.0.0.MR2
         Environment: Windows XP
            Reporter: Krishnan Sivaramakrishna Iyer
         Assigned To: Mark Proctor
             Fix For: 4.0.0.MR2


Currently, if there exists a string such as 
final String version = "version 12.2";
and you try to match it against the following regex 
version\\s*\\d+\\.\\d+.*
It will not match. This is because of the following problem 

<tirelli> newbie: found the problem
<tirelli> it is a bug
<tirelli> but there is a workaround
<tirelli> problem is the current DRL grammar does not allow to escape things like \s and \d
<tirelli> EscapeSequence
<tirelli>     :   '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\'|'.')
<tirelli> those are the only accepted symbols to be escaped today
<tirelli> may I ask you plz to open a JIRA requesting support to all regexp symbols? I will fix that for 4.0 final
<tirelli> meanwhile, you can do this to work:
<tirelli> line matches "version[ \t]*[0-9]+\.[0-9]+.*"

Thanks, 
Krishnan

Test case : 

#created on: May 16, 2007
package com.sample
 
#list any import classes here.
import com.sample.Device;
import com.sample.Line;
 
#declare any global variables here
 
rule "Check for Cisco Version Exp"
 
	when
		Line ( line matches "version\\s*\\d+\\.\\d+\\.*" )
	then 
		System.out.println("There exists a line that matches cisco version expression.");
end
 
====
package com.sample;
 
import java.lang.String;
 
/**
 * @author kiyer
 *
 */
public class Line {
 
	private String line;
 
	public Line(String line) {
		setLine(line);
	}
 
	/**
	 * @return the line
	 */
	public String getLine() {
		return line;
	}
 
	/**
	 * @param line the line to set
	 */
	public void setLine(String line) {
		this.line = line;
	}
 
}
===
 
package com.sample;
 
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.io.Reader;
 
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.compiler.PackageBuilder;
import org.drools.StatefulSession;
import org.drools.rule.Package;
 
/**
 * This is a sample file to launch a rule package from a rule source file.
 */
public class CfiTest {
 
	public static final void main(String[] args) {
        try {
 
            //load up the rulebase
            final RuleBase ruleBase = readRule();
            final StatefulSession session = ruleBase.newStatefulSession();
 
            Line lineObj = new Line("version 12.2");
            session.assertObject(lineObj);            
            session.fireAllRules();
            session.dispose();
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }
 
    /**
     * Please note that this is the "low level" rule assembly API.
     */
    private static RuleBase readRule() throws Exception {
        //read in the source
        final Reader source = new InputStreamReader( DroolsTest.class.getResourceAsStream( "/CfiTest.drl" ) );
 
        //optionally read in the DSL (if you are using it).
        //Reader dsl = new InputStreamReader( DroolsTest.class.getResourceAsStream( "/mylang.dsl" ) );
 
        //Use package builder to build up a rule package.
        //An alternative lower level class called "DrlParser" can also be used...
 
        final PackageBuilder builder = new PackageBuilder();
 
        //this wil parse and compile in one step
        //NOTE: There are 2 methods here, the one argument one is for normal DRL.
        builder.addPackageFromDrl( source );
 
        //Use the following instead of above if you are using a DSL:
        //builder.addPackageFromDrl( source, dsl );
 
        //get the compiled package (which is serializable)
        final Package pkg = builder.getPackage();
 
        //add the package to a rulebase (deploy the rule package).
        final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
        ruleBase.addPackage( pkg );
        System.out.println("Successfully loaded the rules file.");
        return ruleBase;
    }
 
}


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jboss-jira mailing list