Can we not just read from the beginning of the rules string to find the first \n and throw the rest away? Right now it looks like we're relying on split to parse the entire file into an array only to use the first element. 

```
String line = rules.substring(0, str.indexOf("\n"));
```

Also, I'd change the if matches to look like this:

```
if (!m.matches()) {
   throw new RuleParseException("Unable to read version from rules file.");
}

this.version = m.group(1); // remove line 66 as well as there's not need to initialize twice.
```