Coder Social home page Coder Social logo

pemistahl / grex Goto Github PK

View Code? Open in Web Editor NEW
6.7K 45.0 155.0 1.62 MB

A command-line tool and Rust library with Python bindings for generating regular expressions from user-provided test cases

Home Page: https://pemistahl.github.io/grex-js/

License: Apache License 2.0

Rust 96.25% Python 3.75%
command-line-tool tool regex regexp regex-pattern regular-expression regular-expressions rust cli rust-cli terminal rust-library rust-crate python python-library

grex's Introduction

grex


rust build status python build status docs.rs codecov dependency status demo

downloads crates.io lib.rs supported Python versions pypi license

Linux 64-bit Download Linux ARM64 Download

MacOS 64-bit Download MacOS ARM64 Download

Windows 64-bit Download Windows ARM64 Download


grex demo


1. What does this tool do?

grex is a library as well as a command-line utility that is meant to simplify the often complicated and tedious task of creating regular expressions. It does so by automatically generating a single regular expression from user-provided test cases. The resulting expression is guaranteed to match the test cases which it was generated from.

This project has started as a Rust port of the JavaScript tool regexgen written by Devon Govett. Although a lot of further useful features could be added to it, its development was apparently ceased several years ago. The plan is now to add these new features to grex as Rust really shines when it comes to command-line tools. grex offers all features that regexgen provides, and more.

The philosophy of this project is to generate the most specific regular expression possible by default which exactly matches the given input only and nothing else. With the use of command-line flags (in the CLI tool) or preprocessing methods (in the library), more generalized expressions can be created.

The produced expressions are Perl-compatible regular expressions which are also compatible with the regular expression parser in Rust's regex crate. Other regular expression parsers or respective libraries from other programming languages have not been tested so far, but they ought to be mostly compatible as well.

2. Do I still need to learn to write regexes then?

Definitely, yes! Using the standard settings, grex produces a regular expression that is guaranteed to match only the test cases given as input and nothing else. This has been verified by property tests. However, if the conversion to shorthand character classes such as \w is enabled, the resulting regex matches a much wider scope of test cases. Knowledge about the consequences of this conversion is essential for finding a correct regular expression for your business domain.

grex uses an algorithm that tries to find the shortest possible regex for the given test cases. Very often though, the resulting expression is still longer or more complex than it needs to be. In such cases, a more compact or elegant regex can be created only by hand. Also, every regular expression engine has different built-in optimizations. grex does not know anything about those and therefore cannot optimize its regexes for a specific engine.

So, please learn how to write regular expressions! The currently best use case for grex is to find an initial correct regex which should be inspected by hand if further optimizations are possible.

3. Current Features

  • literals
  • character classes
  • detection of common prefixes and suffixes
  • detection of repeated substrings and conversion to {min,max} quantifier notation
  • alternation using | operator
  • optionality using ? quantifier
  • escaping of non-ascii characters, with optional conversion of astral code points to surrogate pairs
  • case-sensitive or case-insensitive matching
  • capturing or non-capturing groups
  • optional anchors ^ and $
  • fully compliant to Unicode Standard 15.0
  • fully compatible with regex crate 1.9.0+
  • correctly handles graphemes consisting of multiple Unicode symbols
  • reads input strings from the command-line or from a file
  • produces more readable expressions indented on multiple using optional verbose mode
  • optional syntax highlighting for nicer output in supported terminals

4. How to install?

4.1 The command-line tool

You can download the self-contained executable for your platform above and put it in a place of your choice. Alternatively, pre-compiled 64-Bit binaries are available within the package managers Scoop (for Windows), Homebrew (for macOS and Linux), MacPorts (for macOS), and Huber (for macOS, Linux and Windows). Raúl Piracés has contributed a Chocolatey Windows package.

grex is also hosted on crates.io, the official Rust package registry. If you are a Rust developer and already have the Rust toolchain installed, you can install by compiling from source using cargo, the Rust package manager. So the summary of your installation options is:

( brew | cargo | choco | huber | port | scoop ) install grex

4.2 The library

In order to use grex as a library, simply add it as a dependency to your Cargo.toml file:

[dependencies]
grex = { version = "1.4.5", default-features = false }

The dependency clap is only needed for the command-line tool. By disabling the default features, the download and compilation of clap is prevented for the library.

5. How to use?

Detailed explanations of the available settings are provided in the library section. All settings can be freely combined with each other.

5.1 The command-line tool

Test cases are passed either directly (grex a b c) or from a file (grex -f test_cases.txt). grex is able to receive its input from Unix pipelines as well, e.g. cat test_cases.txt | grex -.

The following table shows all available flags and options:

$ grex -h

grex 1.4.5
© 2019-today Peter M. Stahl <[email protected]>
Licensed under the Apache License, Version 2.0
Downloadable from https://crates.io/crates/grex
Source code at https://github.com/pemistahl/grex

grex generates regular expressions from user-provided test cases.

Usage: grex [OPTIONS] {INPUT...|--file <FILE>}

Input:
  [INPUT]...         One or more test cases separated by blank space
  -f, --file <FILE>  Reads test cases on separate lines from a file

Digit Options:
  -d, --digits      Converts any Unicode decimal digit to \d
  -D, --non-digits  Converts any character which is not a Unicode decimal digit to \D

Whitespace Options:
  -s, --spaces      Converts any Unicode whitespace character to \s
  -S, --non-spaces  Converts any character which is not a Unicode whitespace character to \S

Word Options:
  -w, --words      Converts any Unicode word character to \w
  -W, --non-words  Converts any character which is not a Unicode word character to \W

Escaping Options:
  -e, --escape           Replaces all non-ASCII characters with unicode escape sequences
      --with-surrogates  Converts astral code points to surrogate pairs if --escape is set

Repetition Options:
  -r, --repetitions
          Detects repeated non-overlapping substrings and converts them to {min,max} quantifier
          notation
      --min-repetitions <QUANTITY>
          Specifies the minimum quantity of substring repetitions to be converted if --repetitions
          is set [default: 1]
      --min-substring-length <LENGTH>
          Specifies the minimum length a repeated substring must have in order to be converted if
          --repetitions is set [default: 1]

Anchor Options:
      --no-start-anchor  Removes the caret anchor `^` from the resulting regular expression
      --no-end-anchor    Removes the dollar sign anchor `$` from the resulting regular expression
      --no-anchors       Removes the caret and dollar sign anchors from the resulting regular
                         expression

Display Options:
  -x, --verbose   Produces a nicer-looking regular expression in verbose mode
  -c, --colorize  Provides syntax highlighting for the resulting regular expression

Miscellaneous Options:
  -i, --ignore-case     Performs case-insensitive matching, letters match both upper and lower case
  -g, --capture-groups  Replaces non-capturing groups with capturing ones
  -h, --help            Prints help information
  -v, --version         Prints version information

 

5.2 The library

5.2.1 Default settings

Test cases are passed either from a collection via RegExpBuilder::from() or from a file via RegExpBuilder::from_file(). If read from a file, each test case must be on a separate line. Lines may be ended with either a newline \n or a carriage return with a line feed \r\n.

use grex::RegExpBuilder;

let regexp = RegExpBuilder::from(&["a", "aa", "aaa"]).build();
assert_eq!(regexp, "^a(?:aa?)?$");

5.2.2 Convert to character classes

use grex::RegExpBuilder;

let regexp = RegExpBuilder::from(&["a", "aa", "123"])
    .with_conversion_of_digits()
    .with_conversion_of_words()
    .build();
assert_eq!(regexp, "^(\\d\\d\\d|\\w(?:\\w)?)$");

5.2.3 Convert repeated substrings

use grex::RegExpBuilder;

let regexp = RegExpBuilder::from(&["aa", "bcbc", "defdefdef"])
    .with_conversion_of_repetitions()
    .build();
assert_eq!(regexp, "^(?:a{2}|(?:bc){2}|(?:def){3})$");

By default, grex converts each substring this way which is at least a single character long and which is subsequently repeated at least once. You can customize these two parameters if you like.

In the following example, the test case aa is not converted to a{2} because the repeated substring a has a length of 1, but the minimum substring length has been set to 2.

use grex::RegExpBuilder;

let regexp = RegExpBuilder::from(&["aa", "bcbc", "defdefdef"])
    .with_conversion_of_repetitions()
    .with_minimum_substring_length(2)
    .build();
assert_eq!(regexp, "^(?:aa|(?:bc){2}|(?:def){3})$");

Setting a minimum number of 2 repetitions in the next example, only the test case defdefdef will be converted because it is the only one that is repeated twice.

use grex::RegExpBuilder;

let regexp = RegExpBuilder::from(&["aa", "bcbc", "defdefdef"])
    .with_conversion_of_repetitions()
    .with_minimum_repetitions(2)
    .build();
assert_eq!(regexp, "^(?:bcbc|aa|(?:def){3})$");

5.2.4 Escape non-ascii characters

use grex::RegExpBuilder;

let regexp = RegExpBuilder::from(&["You smell like 💩."])
    .with_escaping_of_non_ascii_chars(false)
    .build();
assert_eq!(regexp, "^You smell like \\u{1f4a9}\\.$");

Old versions of JavaScript do not support unicode escape sequences for the astral code planes (range U+010000 to U+10FFFF). In order to support these symbols in JavaScript regular expressions, the conversion to surrogate pairs is necessary. More information on that matter can be found here.

use grex::RegExpBuilder;

let regexp = RegExpBuilder::from(&["You smell like 💩."])
    .with_escaped_non_ascii_chars(true)
    .build();
assert_eq!(regexp, "^You smell like \\u{d83d}\\u{dca9}\\.$");

5.2.5 Case-insensitive matching

The regular expressions that grex generates are case-sensitive by default. Case-insensitive matching can be enabled like so:

use grex::RegExpBuilder;

let regexp = RegExpBuilder::from(&["big", "BIGGER"])
    .with_case_insensitive_matching()
    .build();
assert_eq!(regexp, "(?i)^big(?:ger)?$");

5.2.6 Capturing Groups

Non-capturing groups are used by default. Extending the previous example, you can switch to capturing groups instead.

use grex::RegExpBuilder;

let regexp = RegExpBuilder::from(&["big", "BIGGER"])
    .with_case_insensitive_matching()
    .with_capturing_groups()
    .build();
assert_eq!(regexp, "(?i)^big(ger)?$");

5.2.7 Verbose mode

If you find the generated regular expression hard to read, you can enable verbose mode. The expression is then put on multiple lines and indented to make it more pleasant to the eyes.

use grex::RegExpBuilder;
use indoc::indoc;

let regexp = RegExpBuilder::from(&["a", "b", "bcd"])
    .with_verbose_mode()
    .build();

assert_eq!(regexp, indoc!(
    r#"
    (?x)
    ^
      (?:
        b
        (?:
          cd
        )?
        |
        a
      )
    $"#
));

5.2.8 Disable anchors

By default, the anchors ^ and $ are put around every generated regular expression in order to ensure that it matches only the test cases given as input. Often enough, however, it is desired to use the generated pattern as part of a larger one. For this purpose, the anchors can be disabled, either separately or both of them.

use grex::RegExpBuilder;

let regexp = RegExpBuilder::from(&["a", "aa", "aaa"])
    .without_anchors()
    .build();
assert_eq!(regexp, "a(?:aa?)?");

5.3 Examples

The following examples show the various supported regex syntax features:

$ grex a b c
^[a-c]$

$ grex a c d e f
^[ac-f]$

$ grex a b x de
^(?:de|[abx])$

$ grex abc bc
^a?bc$

$ grex a b bc
^(?:bc?|a)$

$ grex [a-z]
^\[a\-z\]$

$ grex -r b ba baa baaa
^b(?:a{1,3})?$

$ grex -r b ba baa baaaa
^b(?:a{1,2}|a{4})?$

$ grex y̆ a z
^(?:y̆|[az])$
Note: 
Grapheme y̆ consists of two Unicode symbols:
U+0079 (Latin Small Letter Y)
U+0306 (Combining Breve)

$ grex "I ♥ cake" "I ♥ cookies"
^I ♥ c(?:ookies|ake)$
Note:
Input containing blank space must be 
surrounded by quotation marks.

The string "I ♥♥♥ 36 and ٣ and 💩💩." serves as input for the following examples using the command-line notation:

$ grex <INPUT>
^I ♥♥♥ 36 and ٣ and 💩💩\.$

$ grex -e <INPUT>
^I \u{2665}\u{2665}\u{2665} 36 and \u{663} and \u{1f4a9}\u{1f4a9}\.$

$ grex -e --with-surrogates <INPUT>
^I \u{2665}\u{2665}\u{2665} 36 and \u{663} and \u{d83d}\u{dca9}\u{d83d}\u{dca9}\.$

$ grex -d <INPUT>
^I ♥♥♥ \d\d and \d and 💩💩\.$

$ grex -s <INPUT>
^I\s♥♥♥\s36\sand\s٣\sand\s💩💩\.$

$ grex -w <INPUT>
^\w ♥♥♥ \w\w \w\w\w \w \w\w\w 💩💩\.$

$ grex -D <INPUT>
^\D\D\D\D\D\D36\D\D\D\D\D٣\D\D\D\D\D\D\D\D$

$ grex -S <INPUT>
^\S \S\S\S \S\S \S\S\S \S \S\S\S \S\S\S$

$ grex -dsw <INPUT>
^\w\s♥♥♥\s\d\d\s\w\w\w\s\d\s\w\w\w\s💩💩\.$

$ grex -dswW <INPUT>
^\w\s\W\W\W\s\d\d\s\w\w\w\s\d\s\w\w\w\s\W\W\W$

$ grex -r <INPUT>
^I ♥{3} 36 and ٣ and 💩{2}\.$

$ grex -er <INPUT>
^I \u{2665}{3} 36 and \u{663} and \u{1f4a9}{2}\.$

$ grex -er --with-surrogates <INPUT>
^I \u{2665}{3} 36 and \u{663} and (?:\u{d83d}\u{dca9}){2}\.$

$ grex -dgr <INPUT>
^I ♥{3} \d(\d and ){2}💩{2}\.$

$ grex -rs <INPUT>
^I\s♥{3}\s36\sand\s٣\sand\s💩{2}\.$

$ grex -rw <INPUT>
^\w ♥{3} \w(?:\w \w{3} ){2}💩{2}\.$

$ grex -Dr <INPUT>
^\D{6}36\D{5}٣\D{8}$

$ grex -rS <INPUT>
^\S \S(?:\S{2} ){2}\S{3} \S \S{3} \S{3}$

$ grex -rW <INPUT>
^I\W{5}36\Wand\W٣\Wand\W{4}$

$ grex -drsw <INPUT>
^\w\s♥{3}\s\d(?:\d\s\w{3}\s){2}💩{2}\.$

$ grex -drswW <INPUT>
^\w\s\W{3}\s\d(?:\d\s\w{3}\s){2}\W{3}$

6. How to build?

In order to build the source code yourself, you need the stable Rust toolchain installed on your machine so that cargo, the Rust package manager is available. Please note: Rust >= 1.70.0 is required to build the CLI. For the library part, Rust < 1.70.0 is sufficient.

git clone https://github.com/pemistahl/grex.git
cd grex
cargo build

The source code is accompanied by an extensive test suite consisting of unit tests, integration tests and property tests. For running them, simply say:

cargo test

Benchmarks measuring the performance of several settings can be run with:

cargo bench

7. Python extension module

With the help of PyO3 and Maturin, the library has been compiled to a Python extension module so that it can be used within any Python software as well. It is available in the Python Package Index and can be installed with:

pip install grex

To build the Python extension module yourself, create a virtual environment and install Maturin.

python -m venv /path/to/virtual/environment
source /path/to/virtual/environment/bin/activate
pip install maturin
maturin build

The Python library contains a single class named RegExpBuilder that can be imported like so:

from grex import RegExpBuilder

8. WebAssembly support

This library can be compiled to WebAssembly (WASM) which allows to use grex in any JavaScript-based project, be it in the browser or in the back end running on Node.js.

The easiest way to compile is to use wasm-pack. After the installation, you can, for instance, build the library with the web target so that it can be directly used in the browser:

wasm-pack build --target web

This creates a directory named pkg on the top-level of this repository, containing the compiled wasm files and JavaScript and TypeScript bindings. In an HTML file, you can then call grex like the following, for instance:

<script type="module">
    import init, { RegExpBuilder } from "./pkg/grex.js";

    init().then(_ => {
        alert(RegExpBuilder.from(["hello", "world"]).build());
    });
</script>

There are also some integration tests available both for Node.js and for the browsers Chrome, Firefox and Safari. To run them, simply say:

wasm-pack test --node --headless --chrome --firefox --safari

If the tests fail to start in Safari, you need to enable Safari's web driver first by running:

sudo safaridriver --enable

The output of wasm-pack will be hosted in a separate repository which allows to add further JavaScript-related configuration, tests and documentation. grex will then be added to the npm registry as well, allowing for an easy download and installation within every JavaScript or TypeScript project.

There is a demo website available where you can give grex a try.

demo website

9. How does it work?

  1. A deterministic finite automaton (DFA) is created from the input strings.

  2. The number of states and transitions between states in the DFA is reduced by applying Hopcroft's DFA minimization algorithm.

  3. The minimized DFA is expressed as a system of linear equations which are solved with Brzozowski's algebraic method, resulting in the final regular expression.

10. What's next for version 1.5.0?

Take a look at the planned issues.

11. Contributions

In case you want to contribute something to grex, I encourage you to do so. Do you have ideas for cool features? Or have you found any bugs so far? Feel free to open an issue or send a pull request. It's very much appreciated. :-)

grex's People

Contributors

abendstolz avatar alarsyo avatar dependabot[bot] avatar herbygillot avatar ildar-shaimordanov avatar innobead avatar jqnatividad avatar pemistahl avatar spenserblack avatar tranzystorekk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

grex's Issues

Performance enhancements to enable large inputs

Hi,

I want to run this on a billion-sized low entropy case-insensitive UTF-8 input with a variable number of characters up to approximately 256 bytes each.

The data comply to an specification format but empirically it is very low entropy, only uses a very narrow subset of the specification and also a very narrow subset of UTF-8 characters.

Think of URI schemes like mailto [1]. The standard yields ample provisions for the format but empirically only a narrow subset is used.

However DFA is very slow even for very small samples. In addition even though I am not very proficient in Rust, I cannot see how to introduce MP or MPI constructs. DFA minimization also returns impractical expressions and I cannot see how to relax, penalize or restrict the size of the expression, coalesce (arbitrary) character ranges or groups, include prior knowledge of the superset expression defined by the specification format, or take advantage of data preorderings.

Finding an expression to match legal and legitimate data based on the empirical set is useful in determining diverging datum.

As an example, if some subexpression is know by the specification to be constrained to \w characters and in the data all lowercase alphabet characters except one were present, it would be fine to merge ranges to [a-z]. The point here would be that even though this subexpression can be all \w characters per specification, only [a-z] would be used in practice - and if some new datum had numbers, even though the specification allows it, it would be kind of weird given a billion samples did not.

The constraints imposed by the DFA solution as implemented are too strict in this regard and I cannot see where to go from here.

To summarize, I would greatly appreciate if you could point me towards scaling this library to work on large inputs.

I hope this tiny discussion interests you to some degree.

Vítor

[1] https://datatracker.ietf.org/doc/html/rfc6068#section-2

Make anchors `^` and `$` optional

One of the use cases for grex (IMHO) is to use its generated patterns as part of a larger pattern. In this case, the ^ and $ anchors in the output are not desired. Have you considered making this optional?

Treat diffs as separate groups

For example:


<iframe src="//player.bilibili.com/player.html?aid=303065226&bvid=BV1dP411n7bc&cid=833485551&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>

<iframe src="//player.bilibili.com/player.html?aid=261233537&bvid=BV1xe411j7EQ&cid=851171461&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>

<iframe src="//player.bilibili.com/player.html?aid=558528772&bvid=BV1Ee4y1r7wX&cid=848823074&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>


<iframe src="//player.bilibili.com/player.html?aid=455751094&bvid=BV1U5411s7RU&cid=383073940&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>

diff:

aid=303065226&bvid=BV1dP411n7bc&cid=833485551
aid=261233537&bvid=BV1xe411j7EQ&cid=851171461
aid=558528772&bvid=BV1Ee4y1r7wX&cid=848823074
aid=455751094&bvid=BV1U5411s7RU&cid=383073940

regex:

aid=([0-9]+)&bvid=([0-9a-zA-Z]+)&cid=([0-9]+)

current output grex -f grex.txt -g:

<iframe src="//player\.bilibili\.com/player\.html\?aid=(((261233537&bvid=BV1xe411j7EQ&cid=85117146|303065226&bvid=BV1dP411n7bc&cid=83348555)1|455751094&bvid=BV1U5411s7RU&cid=383073940)|558528772&bvid=BV1Ee4y1r7wX&cid=848823074)&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>$
suliveevil@swy-M1 ~ % grex -f grex.txt -r
^<iframe src="/{2}player\.(?:bili){2}\.com/player\.html\?aid=(?:(?:45{2}751094&bvid=BV1U541{2}s7RU&cid=383073940|(?:26123{2}537&bvid=BV1xe41{2}j7EQ&cid=851{2}7146|(?:30){2}652{2}6&bvid=BV1dP41{2}n7bc&cid=83{2}485{3})1)|5{2}85287{2}2&bvid=BV1Ee4y1r7wX&cid=848{2}23074)&page=1" scrol{2}ing="no" border="0" frameborder="no" framespacing="0" al{2}owful{2}scre{2}n="true"> </iframe>

截屏2022-10-04 05 23 50

expected output:

<iframe src="//player\.bilibili\.com/player\.html\?aid=([0-9]+)&bvid=([0-9a-zA-Z]+)&cid=([0-9]+)&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>

截屏2022-10-04 05 24 20

#48

Problems to consider when making anchors optional

It seems grex inherited this bug from regexgen: devongovett/regexgen#31

Repro:

$ cat input
AGBHD
EIBCD
EGBCD
FBJBF
AGBH
EIBC
EGBC
EBC
FBC
CD
F
C
ABCD
EBCD
FBCD

$ # note the last entry to be matched, i.e. "FBCD"

$ grex --file input
^(?:F(?:BJBF)?|(?:E(?:[GI])?BC|(?:FB)?C)D?|A(?:GBHD?|BCD))$

After removing ^ and $ (see #30), this generated pattern does not match "FBCD" despite it being one of the input strings:

'FBCD'.match(/(?:F(?:BJBF)?|(?:E(?:[GI])?BC|(?:FB)?C)D?|A(?:GBHD?|BCD))/g);
// → ['F', 'CD']

Here’s what I think the bug is: within the generated pattern, it should never happen that something on the left matches a prefix of something that's further on the right, because then the latter can never match.

See devongovett/regexgen#31 (comment) for some more details.

installation problem

facing a weird issue while installing grex

$ sudo cargo install grex
    Updating crates.io index
error: process didn't exit successfully: `rustc -vV` (exit status: 127)
--- stderr
rustc: relocation error: /lib64/librustc_driver-eaa0856b54809337.so: symbol _ZNK4llvm18DiagnosticLocation15getAbsolutePathEv, version LLVM_11 not defined in file libLLVM-11.so with link time reference

Provide more installation options

I think this is a great tool by description. But I use ubuntu and I doesn't have homebrew (and I don't want to install it only for this tool). I cannot try this tool :( I think good idea an wget one liner install script, or a step by step description, or apt or anithing what a tipical ubuntu laptop can do without install more package manager.

Allow to specify characters that have to be converted to character class

First of all thank you for this great tool.
When using, I often need to convert text into more detailed character classes, not just non-digits or non-blank characters.
Is it possible to customize the range of characters to be converted into character classes, like [a-e\d], [①-⑨⒈-⒙] or specific languages such as Chinese and Japanese.
For example, if the source text is 我的名字是Tom, I hope to get the regular expression [\u{4e00}-\u{9fa5}]{5}\w{3} instead of \w{8}, by specifying character class [\u{4e00}-\u{9fa5}].
And I want to specify the maximum and minimum length of repeated substrings. Sometimes I get results like (\w{5}|\w{7,8}|\w{10,17}), but the regular expression I expected is (\w{3,20}). So I hope to be able to specify the minimum and maximum repetition times of the substring, or combine the repetition times into an interval instead of multiple branches.
I think these two points can be specified together, using multiple formats similar to \w{3,20} to specify characters that must be converted into character classes.

Couldn't compile ndarray

Hey I'm on Debian bullseye and cargo install grex won't succeed :

[lots of errors]
error: aborting due to 204 previous errors

For more information about this error, try `rustc --explain E0277`.
error: could not compile `ndarray`.

ndarray version = 0.15.1
cargo version = 1.47

has someone experienced the same issue ?

Remove dependency on linked-list crate

grex uses a dependency on the linked-list crate whose last version was released nearly five years ago. I once added this dependency because it provides a cursor implementation of a linked list that allows to modify the list during iteration. This comes in handy for the implementation of the DFA minimization algorithm.

However, as it turns out, it is not so difficult to rewrite the algorithm using a simple vector instead of the cursor-based linked list. So it makes sense to get rid of the no longer maintained dependency.

Installation problem

When installing grex on Debian Linux, I get 365 syntax errors.
They seem to be many repetitions of:
the trait data_traits::RawDataSubst<u128> is not implemented for <S as data_traits::DataOwned>::MaybeUninit
348 | impl_scalar_lhs_op!(Complex, Ordered, /, Div, div, "division");
| -------------------------------------------------------------------- in this macro invocation
|
::: /home/greg/.cargo/registry/src/github.com-1ecc6299db9ec823/ndarray-0.15.0/src/data_traits.rs:411:1
|
411 | pub unsafe trait DataOwned: Data {
| -------------------------------- required by data_traits::DataOwned
I seem to get the same blast whether I run cargo from the command-line or in vscode.
I installed with:
$ git clone https://github.com/pemistahl/grex.git
$ cd grex
$ cargo build
and
$ cargo install grex
Since I don't see any other complaints perhaps my distribution is to blame:
$ uname -a
Linux debian-dell-desktop 5.10.0-4-amd64 #1 SMP Debian 5.10.19-1 (2021-03-02) x86_64 GNU/Linux
Creating an empty project with grex as the only dependency also fails.
Version 1.1 of grex seems to run fine.
I've only been programming rust for about a year, so I haven't gotten to writing macros yet, but I'll try to dig deeper.
-- Greg

Add feature for disabling capturing groups

grex produces regular expressions with capturing groups by default. Some users might prefer to create regexes with non-capturing groups instead, so I will add a new library method and a new command-line flag for handling this use case.

Document how stdin is read in `--help` message

Using - is sometimes used to specify that the file is stdin or stdout for several commands. For example

echo hello | cat -  # hello
echo main | git checkout -  # Switched to branch 'main'

I'm hoping that I can use this style to also get grex to read from stdin.

The current workaround for me is

command-that-outputs-patterns | grex --file /dev/stdin

Excessive memory allocation for constructing certain regexes.

Excessive memory allocation for constructing certain regexes.

taipale
memory allocation of 66336431728 bytes failed
Command terminated by signal 6

timeit ()
{
    if [ $# -ge 1 ]; then
        local info_color=$(printf "${info_color}");
        local reset_colors=$(printf "${reset_colors}");
        command time -f "\nTime output:\n------------\n\n  * Command: ${info_color}%C${reset_colors}\n  * Elapsed wall time: ${info_color}%E${reset_colors} = ${info_color}%e seconds${reset_colors}\n  * Elapsed CPU time:\n     - User: ${info_color}%U${reset_colors}\n     - Sys: ${info_color}%S${reset_colors}\n  * CPU usage: ${info_color}%P${reset_colors}\n  * Context switching:\n     - Voluntarily (e.g.: waiting for I/O operation): ${info_color}%w${reset_colors}\n     - Involuntarily (time slice expired): ${info_color}%c${reset_colors}\n  * Maximum resident set size (RSS: memory) (kiB): ${info_color}%M${reset_colors}\n  * Number of times the process was swapped out of main memory: ${info_color}%W${reset_colors}\n  * Filesystem:\n     - # of inputs: ${info_color}%I${reset_colors}\n     - # of outputs: ${info_color}%O${reset_colors}\n  * Exit status: ${info_color}%x${reset_colors}\n" "${@}";
        return 0;
    else
        printf "${help_color}Usage:${reset_colors}   timeit <command> <args>\n\n${help_color}Purpose:${reset_colors} Get information about run time, CPU usage, memory usage, ... of a command.\n\n";
        return 1;
    fi
}

for collection in  $(awk -F '__' '{ print $1 }' input.txt | sort -u) ; do
     echo ${collection};
     timeit grex -c --file <(grep "$collection" input.txt);
     echo;
done > output.txt 2>&1

There is quite a big difference in CPU time and memory usage, depending on the input.
output.txt
input.txt

Filtered output.txt:

❯ grep -E '^\w|Elapsed wall time|RSS' output.txt |grep -v output
bergman
  * Elapsed wall time: 0:00.00 = 0.00 seconds
  * Maximum resident set size (RSS: memory) (kiB): 4276
c2h2_zfs
  * Elapsed wall time: 0:00.00 = 0.00 seconds
  * Maximum resident set size (RSS: memory) (kiB): 3460
cisbp
  * Elapsed wall time: 0:00.08 = 0.08 seconds
  * Maximum resident set size (RSS: memory) (kiB): 20628
dbcorrdb
  * Elapsed wall time: 0:01.97 = 1.97 seconds
  * Maximum resident set size (RSS: memory) (kiB): 895680
elemento
  * Elapsed wall time: 0:00.01 = 0.01 seconds
  * Maximum resident set size (RSS: memory) (kiB): 7436
factorbook
  * Elapsed wall time: 0:00.01 = 0.01 seconds
  * Maximum resident set size (RSS: memory) (kiB): 5592
flyfactorsurvey
  * Elapsed wall time: 0:11.83 = 11.83 seconds
  * Maximum resident set size (RSS: memory) (kiB): 4917700
hdpi
  * Elapsed wall time: 0:00.12 = 0.12 seconds
  * Maximum resident set size (RSS: memory) (kiB): 42020
hocomoco
  * Elapsed wall time: 0:00.93 = 0.93 seconds
  * Maximum resident set size (RSS: memory) (kiB): 127308
homer
  * Elapsed wall time: 0:04.16 = 4.16 seconds
  * Maximum resident set size (RSS: memory) (kiB): 1257744
idmmpmm
  * Elapsed wall time: 0:00.00 = 0.00 seconds
  * Maximum resident set size (RSS: memory) (kiB): 3536
jaspar
  * Elapsed wall time: 0:00.02 = 0.02 seconds
  * Maximum resident set size (RSS: memory) (kiB): 6296
neph
  * Elapsed wall time: 0:00.00 = 0.00 seconds
  * Maximum resident set size (RSS: memory) (kiB): 3028
predrem
  * Elapsed wall time: 0:00.00 = 0.00 seconds
  * Maximum resident set size (RSS: memory) (kiB): 3920
scertf
  * Elapsed wall time: 0:00.04 = 0.04 seconds
  * Maximum resident set size (RSS: memory) (kiB): 7600
stark
  * Elapsed wall time: 0:00.06 = 0.06 seconds
  * Maximum resident set size (RSS: memory) (kiB): 40160
swissregulon
  * Elapsed wall time: 0:00.24 = 0.24 seconds
  * Maximum resident set size (RSS: memory) (kiB): 62404
taipale
memory allocation of 66336431728 bytes failedCommand terminated by signal 6
  * Elapsed wall time: 1:40.82 = 100.82 seconds
  * Maximum resident set size (RSS: memory) (kiB): 45748
taipale_cyt_meth
  * Elapsed wall time: 0:17.88 = 17.88 seconds
  * Maximum resident set size (RSS: memory) (kiB): 8250552
taipale_tf_pairs
  * Elapsed wall time: 0:13.25 = 13.25 seconds
  * Maximum resident set size (RSS: memory) (kiB): 6866384
tfdimers
  * Elapsed wall time: 0:00.00 = 0.00 seconds
  * Maximum resident set size (RSS: memory) (kiB): 5524
tiffin
  * Elapsed wall time: 0:00.00 = 0.00 seconds
  * Maximum resident set size (RSS: memory) (kiB): 3216
transfac_pro
  * Elapsed wall time: 0:00.15 = 0.15 seconds
  * Maximum resident set size (RSS: memory) (kiB): 43884
transfac_public
  * Elapsed wall time: 0:00.01 = 0.01 seconds
  * Maximum resident set size (RSS: memory) (kiB): 5076
yetfasco
  * Elapsed wall time: 0:00.06 = 0.06 seconds
  * Maximum resident set size (RSS: memory) (kiB): 31096

Full output.txt

bergman
^bergman__(?:s(?:hn\-ZFP[12]|na|d)|(?:dif_)?Rel|S(?:tat92E|u_H_)|E(?:cR_usp|ip74EF)|p(?:r(?:d\-[HP]D|os)|ho)|A(?:bd\-B|ef1)|croc|d(?:l\-[AB]|sx)|Hr46|TFAM|mirr|retn|e(?:sg|ve|n)|Cf2|Ubx|ftz|g(?:cm|rh)|ovo|ems|tll|(?:bc|ca)d|vnd|(?:pn|K)r|(?:b[iy]|pa|ti|ze)n|srp|usp|hb|oc)$

Time output:
------------

  * Command: grex -c --file /dev/fd/63
  * Elapsed wall time: 0:00.00 = 0.00 seconds
  * Elapsed CPU time:
     - User: 0.00
     - Sys: 0.00
  * CPU usage: 88%
  * Context switching:
     - Voluntarily (e.g.: waiting for I/O operation): 1
     - Involuntarily (time slice expired): 1
  * Maximum resident set size (RSS: memory) (kiB): 4276
  * Number of times the process was swapped out of main memory: 0
  * Filesystem:
     - # of inputs: 0
     - # of outputs: 0
  * Exit status: 0


c2h2_zfs
^c2h2_zfs__M(?:0(?:4(?:0[0146]|[68][29])|369)|(?:03[79]|184|201)3|1808|3(?:269|383|9(?:1[13]|28))|(?:0(?:38|41)|38[37])5|4(?:205|021|331)|(?:382|4(?:29|44))7|3984|(?:243|380)0|5(?:1(?:0[37]|1[146-8]|2[035]|47|84)|280))$

Time output:
------------

  * Command: grex -c --file /dev/fd/63
  * Elapsed wall time: 0:00.00 = 0.00 seconds
  * Elapsed CPU time:
     - User: 0.00
     - Sys: 0.00
  * CPU usage: 100%
  * Context switching:
     - Voluntarily (e.g.: waiting for I/O operation): 1
     - Involuntarily (time slice expired): 1
  * Maximum resident set size (RSS: memory) (kiB): 3460
  * Number of times the process was swapped out of main memory: 0
  * Filesystem:
     - # of inputs: 0
     - # of outputs: 0
  * Exit status: 0


cisbp
^cisbp__M(?:0(?:(?:(?:0(?:0[479]|1[178]|3[367]|6[36]|8[2-5])|1(?:3[0-357]|6[2-46-8]|7[24-9])|2(?:2[0-58]|6[013-689]|8[347])|3(?:2[0-467]|3[0-38]|4[124679]|5[257-9]|6[1-37]|8[346])|12[68]|4(?:5[68]|74)|5(?:0[06-8]|3[02-58]|4[46])|15[0-4689]|6(?:1[03]|2[289]|3[0-4689]|6[589]|7[0-2479]|8[5-9])|7(?:8[2-8]|9[25-8])|8(?:0[1-39]|2[039]|3[278]|5[057-9]|6[02-489]|7[0-249]))|495)|022)|0(?:75|81)[0-7]|1(?:0(?:7[0-479]|8[0346-9])|1(?:0[0-3569]|1[79]|3[5-79]|5[13-9]|6[03467]|7[0135-8]|8[0279])|2(?:0[0-25]|1[179]|2[023568]|4[0-35-7]|9[689])|3(?:5[3-9]|75)|30[01]|4(?:1[89]|22|5[0-7]|6[59]|7[01]|9[14579])|5(?:5[0-4]|7[37-9])|04[0-59]|6(?:1[125]|3[0-59]|6[458])|8(?:4[0137-9]|7[0-589])|94[24-6])|0(?:04|46|64)1|119[1347-9]|127[23]|011[0145]|(?:0(?:07|58)|150)6|0099|125[12]|183[6-9]|2(?:0(?:6[013-59]|8[369]|9[0134])|1(?:0[0-358]|1[124589]|2[0-24]|4[2-467]|5[018]|6[29]|7[0467]|8[1348]|91)|2(?:1[134]|2[38]|4[579])|3(?:3[0489]|4[1347-9]|5[1459]|6[1-3]|7[378]|8[14-9])|4(?:2[1-48]|3[78]|6[457]|7[1-47]|[89][34])|5(?:1[23]|2[2-6]|3[0-268]|5[013-7]|8[124-8]|9[0145])|136|459|6(?:06|[17]9|8[12])|238|768|863|91[6-9])|044[0-48]|160[0-5]|(?:024|200)[0-8]|(?:0(?:10|41)|205)[02-9]|114[0-6]|154[0135-9]|3(?:0(?:2[0-35-8]|3[1-79])|1(?:1[2-46-9]|2[0-48])|4(?:0[1-47-9]|7[0-246-9]|8[0-5])|56[0-25-9]|(?:[23]9|50)[0-8]|(?:13|25)[02-9]|6(?:1[0-8]|[25][02-9]|6[0-6])|19[0135-9]|7(?:6[0135-9]|9[124-69])|80[013-8]|73[02-689]|9(?:2[02-467]|7[02-689]))|(?:025|389)[0-357-9]|(?:18|31)5[014-9]|(?:088|372)[0-36-9]|(?:023|186|298|336)[0-57-9]|(?:027|386)[0-68]|(?:164|239)[0-2]|2207|2(?:07|40)[26]|052[0-278]|244[1-5]|(?:193|2(?:02|56)|3(?:00|32))[013-9]|4(?:0(?:4[0-357-9]|6[04-9]|7[014-9]|9[0-36-9])|1(?:0[0-57-9]|1[0-68]|6[0135-79]|8[0689])|2(?:0[1568]|1[1267]|3[35]|4[129]|5[35-9]|6[01568]|7[034679]|8[0-3]|9[0-2])|3(?:07|1[26]|3[056]|4[2-4]|5[13568]|6[04-6]|7[05-8])|[13]9[09]|4(?:0[05]|1[09]|2[2-47-9])|7(?:1[0-29]|5[0-69])|8(?:0[4-79]|[12][0-278]|4[013-69]|5[0-46-8]|6[1-5]|7[014-79]|8[47-9])|9(?:0[03-9]|1[013-9]|7[0-37-9]|8[0-489]))|(?:0(?:51|72)|126|3(?:49|54|85))[1-9]|(?:106|3(?:14|88))[0-689]|(?:084|136|262|432)0|(?:060|151|417)[7-9]|(?:189|226|38[37]|476)[0-24-9]|472[014-7]|(?:112|400)[1-689]|(?:2(?:01|9[69])|305|492)[0-35-9]|(?:074|3[01]6|4(?:05|14))[0-46-9]|(?:162|394)[2-9]|188[0-47-9]|5(?:0(?:2[1-9]|[34][0-689]|80|9[7-9])|1(?:0[0-24-9]|4[014-7]|6[1-689]|9[0-35-9])|2(?:2[0-46-9]|4[013-6]|5[2-9]|6[0-47-9]|8[024-9]))|(?:2(?:32|95)|3(?:04|23)|415)[0-79]|(?:0(?:1[89]|2[019]|3[019]|4[023]|69|7[013]|89)|1(?:0[0-359]|23|4[34]|5[2389]|9[0-25-9])|2(?:0[34]|2[57-9]|3[01]|5[47]|9[2-47])|3(?:0[17-9]|1[078]|2[0-246-8]|3[013-578]|4[1-6]|5[1-357-9]|6[0347-9]|7[014578]|8[124]|9[0135689])|4(?:0[1-38]|1[23]|4[3-9]|7[03489]|8[39]|9[3-69])|5(?:0[015-7]|1[1-3578]|2[01379])|(?:09|4[56]|5[3-9])[0-9])[0-9]|6(?:07[0-79]|(?:0[0-689]|[1-4][0-9])[0-9]|5[0-5][0-9]))$

Time output:
------------

  * Command: grex -c --file /dev/fd/63
  * Elapsed wall time: 0:00.08 = 0.08 seconds
  * Elapsed CPU time:
     - User: 0.07
     - Sys: 0.00
  * CPU usage: 98%
  * Context switching:
     - Voluntarily (e.g.: waiting for I/O operation): 1
     - Involuntarily (time slice expired): 2
  * Maximum resident set size (RSS: memory) (kiB): 20628
  * Number of times the process was swapped out of main memory: 0
  * Filesystem:
     - # of inputs: 0
     - # of outputs: 8
  * Exit status: 0


dbcorrdb
^dbcorrdb__(?:POLR2A(?:phosphoS2__ENCSR000DYF_1__m(?:1[0-2]|[2-9])|__ENCSR000AOJ_1__m(?:1[0-2]|[2-9]))|POLR2A(?:phosphoS2__ENCSR000DYF|__ENCSR000AOJ)_1__m1|(?:POLR2AphosphoS2__ENCSR000EHF|SETDB1__ENCSR000EWD|CHD1__ENCSR000EFC)_1__m[1-8]|(?:POLR(?:2A(?:phosphoS5__ENCSR000BOV|__ENCSR000ALT)|3G__ENCSR000EHQ)|POLR2AphosphoS2__ENCSR000EGF|S(?:MARCC2__ENCSR000EDL|IN3A__ENCSR000BOW)|TBL1XR1__ENCSR000EGA|ARID3A__ENCSR000EFY|(?:POLR2A__ENCSR000EU|ATF3__ENCSR000BN)U|ZNF384__ENCSR000DYP|STAT3__ENCSR000DZV|E(?:P300__ENCSR000(?:B(?:HB|LM|MA|PW)|DZD)|ZH2__ENCSR000A(?:R[EKR]|SW|TA))|HDAC(?:1__ENCSR000AQF|2__ENCSR000AQG)|(?:SAP30__ENCSR000AQ|HDAC6__ENCSR000AT)J|IKZF1__ENCSR000EUJ|NANOG__ENCSR000BMT|BRF2__ENCSR000DNV|CHD1__ENCSR000(?:AQD|EBU)|MXI1__ENCSR000EIA|RFX5__ENCSR000ECF|IRF3__ENCSR000DZX|TBP__ENCSR000ECB)_1__m[1-4]|(?:(?:POLR2AphosphoS2__ENCSR000ED|SIX5__ENCSR000BG)X|PPARGC1A__ENCSR000EEQ|Z(?:C3H11A__ENCSR000EFR|NF(?:143__ENCSR000DZL|274__ENCSR000EWE))|(?:SUPT20H__ENCSR000DN|ZNF(?:143__ENCSR000EG|384__ENCSR000EF))P|POLR2A__ENCSR000E(?:FB|ZQ)|POLR2A__ENCSR000AKZ|S(?:R(?:EBF1__ENCSR000EEO|F__ENCSR000BGE)|TAT(?:5A__ENCSR000BQZ|1__ENCSR000FAV|2__ENCSR000FBC|3__ENCSR000DO[UX])|I(?:N3A__ENCSR000(?:BOY|EBO)|X5__ENCSR000B(?:IQ|JE)))|T(?:CF7L2__ENCSR000E(?:UV|WT)|AF1__ENCSR000BPF|BP__ENCSR000EDD)|(?:POLR3(?:A__ENCSR000DN|G__ENCSR000EY)|FOXM1__ENCSR000BR|TAF7__ENCSR000BL)U|NFATC1__ENCSR000BQL|(?:ZNF143__ENCSR000EB|RFX5__ENCSR000DZ)W|G(?:TF2F1__ENCSR000EBP|ATA2__ENCSR000EVW)|MYBL2__ENCSR000BRO|C(?:EBPB__ENCSR000BRX|TCF__ENCSR000D(?:LW|TI|UU))|E(?:P300__ENCSR000(?:DZ[GT]|E[DH]V)|LK4__ENCSR000EVB|TS1__ENCSR000B(?:KQ|PU)|ZH2__ENCSR000ASZ)|HCFC1__ENCSR000ECH|R(?:AD21__ENCSR000BLY|E(?:LA__ENCSR000E(?:AW|B[AI])|ST__ENCSR000B(?:MN|QS)))|(?:SIN3A__ENCSR000BL|HDAC2__ENCSR000BN|MXI1__ENCSR000EB|PBX3__ENCSR000BG)R|M(?:AFK__ENCSR000EEB|YC__ENCSR000D(?:LI|OM))|ATF3__ENCSR000B(?:JY|KC)|BDP1__ENCSR000DNX|MAFK__ENCSR000DYV|(?:MTA3__ENCSR000BR|JUN__ENCSR000EG)H)_1__m[1-3]|(?:P(?:OLR2A(?:phosphoS5__ENCSR000B(?:IC|PL)|__ENCSR000(?:BHZ|D(?:K[MT]|L[MQV]|MZ)|E(?:EM|FK|HL|XO|Z[AL])|FA[JWY]))|AX5__ENCSR000BHJ)|(?:POLR2AphosphoS2__ENCSR000DZ|S(?:TAT1__ENCSR000EZ|P1__ENCSR000BH)|BDP1__ENCSR000DO)K|(?:POLR2AphosphoS2__ENCSR000EC|STAT2__ENCSR000FA|TCF12__ENCSR000BI|CHD2__ENCSR000EB|ELF1__ENCSR000BP)T|(?:POLR2AphosphoS5__ENCSR000BQ|STAT3__ENCSR000ED|RAD21__ENCSR000EA)C|T(?:BL1XR1__ENCSR000EGB|CF7L2__ENCSR000E(?:UY|VF)|EAD4__ENCSR000BRY|AF1__ENCSR000BH[OT])|(?:S(?:MARCA4__ENCSR000EH|P1__ENCSR000BK)|POLR2A__ENCSR000DY)O|Z(?:KSCAN1__ENCSR000ECJ|NF(?:143__ENCSR000ECO|217__ENCSR000EWU)|MIZ1__ENCSR000EFQ)|A(?:RID3A__ENCSR000EDP|TF(?:1__ENCSR000DNZ|2__ENCSR000BQU|3__ENCSR000BKE))|(?:POLR2A__ENCSR000BQ|S(?:IN3A__ENCSR000B|TAT3__ENCSR000D)P)B|(?:POLR2A__ENCSR000DN|HNF4A__ENCSR000BL|YY1__ENCSR000EW)F|(?:STAT5A__ENCSR000BR|E2F4__ENCSR000DO)R|(?:POU5F1__ENCSR000BM|HNF4A__ENCSR000EE|CTCF__ENCSR000AQ|ELK1__ENCSR000EF|RXRA__ENCSR000BH)U|(?:POLR2A__ENCSR000EY|MBD4__ENCSR000BQ|BRF1__ENCSR000DN)W|G(?:TF2F1__ENCSR000EHC|A(?:BPA__ENCSR000BIW|TA(?:1__ENCSR000EFT|3__ENCSR000EW[SV])))|(?:TCF7L2__ENCSR000EX|SI(?:N3A__ENCSR000BG|X5__ENCSR000BR)|E2F4__ENCSR000EV)L|(?:BCL11A__ENCSR000BH|JUN__ENCSR000EC)A|S(?:TAT3__ENCSR000DOQ|RF__ENCSR000BLV)|(?:TCF12__ENCSR000BJ|SP2__ENCSR000BQ)G|E(?:P300__ENCSR000(?:BKK|EGY)|ZH2__ENCSR000ARO)|H(?:DAC2__ENCSR000BMC|MGN3__ENCSR000DOB)|(?:FOXA1__ENCSR000BP|SP1__ENCSR000BJ)X|THAP1__ENCSR000BNN|(?:SIRT6__ENCSR000DO|PHF8__ENCSR000AQ|BCL3__ENCSR000BQ)H|(?:FOSL1__ENCSR000BN|JUND__ENCSR000DY|TAF1__ENCSR000B[GK])S|(?:MEF2A__ENCSR000BN|CEBPB__ENCSR000EB)V|N(?:R(?:2(?:C2__ENCSR000EWH|F2__ENCSR000BRS)|3C1__ENCSR000(?:B(?:HG|JC)|EEV))|F(?:E2__ENCSR000FAF|IC__ENCSR000B(?:QX|RN)|Y(?:A__ENCSR000(?:DNS|EGR)|B__ENCSR000DN[MR])))|(?:CEBPB__ENCSR000EF|YY1__ENCSR000EU)M|R(?:AD21__ENCSR000E[CD]E|BBP5__ENCSR000AQI|E(?:LA__ENCSR000E(?:A[GINQ]|BM)|ST__ENCSR000B(?:HM|J[LOP]|OT))|FX5__ENCSR000ECX)|(?:TCF12__ENCSR000BQ|RCOR1__ENCSR000ED|BCL3__ENCSR000BN)Q|(?:HNF4G__ENCSR000BN|BRF1__ENCSR000DO|E2F6__ENCSR000EW)J|KDM5(?:A__ENCSR000AQL|B__ENCSR000AQA)|(?:JUND__ENCSR000EB|MAFK__ENCSR000ED|FOS__ENCSR000EY|TBP__ENCSR000DZ)Z|JUND__ENCSR000BKP|CTCF__ENCSR000(?:A(?:LJ|MA|N[ES]|OO|PF)|BHW|D(?:L[DK]|P[MPSY]|Q[IW]|S[UZ]|T[FLW]|U[GP]|VA|W[QY]|X[DQW])|EFI)|IRF1__ENCSR000EG[KU]|(?:MXI1__ENCSR000EF|CHD1__ENCSR000DZ)E|JUN__ENCSR000E(?:FS|Z[TWX])|YY1__ENCSR000EXG|FOS__ENCSR000FAI)_1__m[12]|(?:P(?:OLR2A(?:phosphoS5__ENCSR000B(?:I[AFL]|OA|P[AI])|__ENCSR000(?:B(?:G[DO]|H[HIN])|D(?:L[JY]|M[KNT]|P[AC])|E(?:A[DJMRUY]|B[CGK]|EP|HP|XX)|FA[LX]))|AX5__ENCSR000B(?:HD|J[HI])|ML__ENCSR000BQ[MY])|(?:POLR2AphosphoS5__ENCSR000BM|E2F4__ENCSR000EW|MAZ__ENCSR000EC|SP2__ENCSR000BN)L|(?:POLR2A(?:phosphoS5__ENCSR000BK|__ENCSR000BM)|CHD2__ENCSR000DZ|MYC__ENCSR000EH|SP1__ENCSR000BI)R|(?:BHLHE40__ENCSR000D[YZ]|C(?:EBPD__ENCSR000BQ|TCF__ENCSR000BP)|SPI1__ENCSR000BI|E2F1__ENCSR000EV|IRF3__ENCSR000EE|NRF1__ENCSR000ED)J|(?:B(?:HLHE40__ENCSR000ED|ATF__ENCSR000BG)|TCF3__ENCSR000BQ)T|(?:BHLHE40__ENCSR000EG|FOSL1__ENCSR000BM|EP300__ENCSR000EC|RAD21__ENCSR000BK|JUND__ENCSR000EY|MAX__ENCSR000EF|S(?:P4__ENCSR000BQ|RF__ENCSR000BI))V|(?:B(?:HLHE40__ENCSR000BI|ACH1__ENCSR000EG)|RAD21__ENCSR000FA|CHD2__ENCSR000E[EH])D|(?:SMARCB1__ENCSR000ED|POLR2A__ENCSR000BI|CTCFL__ENCSR000BN|JUN(?:D__ENCSR000BG|__ENCSR000EE)|MAFK__ENCSR000EC|E2F6__ENCSR000EV)K|(?:SMARCC1__ENCSR000ED|HA\-E2F1__ENCSR000EV|POLR2A__ENCSR000BJ|CTCF__ENCSR000EG|RELA__ENCSR000DY|YY1__ENCSR000BP)M|(?:HA\-E2F1__ENCSR000EW|SIN3A__ENCSR000DY|BRCA1__ENCSR000EB|MAFK__ENCSR000EG|CTCF__ENCSR000BL|USF1__ENCSR000BH)X|T(?:CF7L2__ENCSR000EV[EQ]|EAD4__ENCSR000BR[KP]|AF1__ENCSR000B(?:I[BM]|Q[FN]))|(?:POU2F2__ENCSR000BG|S(?:REBF1__ENCSR000E|MC3__ENCSR000D)Z|TFAP2A__ENCSR000EV|FOSL2__ENCSR000BH|MAX__ENCSR000(?:BL|EU))P|(?:BCLAF1__ENCSR000BK|JUN(?:D__ENCSR000ED|__ENCSR000FA)|MAFK__ENCSR000EF|YY1__ENCSR000BM)H|(?:PO(?:LR2A__ENCSR000BK|U2F2__ENCSR000BI)|FOXA2__ENCSR000BN|CEBPB__ENCSR000(?:BQ|DY)|JUND__ENCSR000EE|M(?:AFF__ENCSR000EG|XI1__ENCSR000DZ)|E(?:2F6__ENCSR000BL|LK1__ENCSR000EC))I|Z(?:BTB(?:33__ENCSR000B(?:H[CR]|KF)|7A__ENCSR000BME)|NF263__ENCSR000E(?:VD|WN)|ZZ3__ENCSR000DNQ|EB1__ENCSR000BND)|(?:TFAP2C__ENCSR000EV|SREBF2__ENCSR000EZ|FO(?:SL2__ENCSR000BQ|XA1__ENCSR000BM)|CTBP2__ENCSR000EU|NRF1__ENCSR000DZ|RFX5__ENCSR000EG)O|(?:ZBTB33__ENCSR000BN|PRDM1__ENCSR000EC|RAD21__ENCSR000BM|IRF4__ENCSR000BG|NFE2__ENCSR000DZ|MYC__ENCSR000EB)Y|(?:BCLAF1__ENCSR000BJ|ZBTB33__ENCSR000BP|TCF12__ENCSR000BG|M(?:XI1__ENCSR000EG|AX__ENCSR000EE))Z|FO(?:X(?:A1__ENCSR000BK[WY]|P2__ENCSR000BG[AB])|S__ENCSR000DO[N-PT])|S(?:TAT(?:1__ENCSR000(?:EH[JK]|FAU)|3__ENCSR000DOZ)|PI1__ENCSR000BG[QW])|BRCA1__ENCSR000ED[BY]|C(?:EBPB__ENCSR000(?:BRQ|EE[EX])|HD2__ENCSR000ECP|TCF__ENCSR000(?:A(?:K[BO]|L[AV]|MF|NO|OA|PM)|B(?:HV|N[HO])|D(?:K[LNPRVX-Z]|L[BE-GOS]|M[ACEFHLORSVY]|N[ACDGI]|P[FGV]|Q[DNY]|R[BENPRUZ]|T[AOR]|U[BHMSX]|V[HIPQ]|W[EHNX]|XI|Y[BD])))|E(?:SR(?:RA__ENCSR000EEW|1__ENCSR000B(?:K[LN]|Q[DR]))|P300__ENCSR000(?:BLW|EGE)|L(?:F1__ENCSR000BM[BDZ]|K4__ENCSR000EVI)|TS1__ENCSR000BKA|ZH2__ENCSR000ASE)|HDAC2__ENCSR000BMG|N(?:R(?:2C2__ENCSR000E(?:UL|V[NS])|3C1__ENCSR000B(?:HF|JR)|F1__ENCSR000E(?:EH|H[HZ]))|FYA__ENCSR000DNN)|R(?:AD21__ENCSR000(?:BL[DS]|EFJ)|COR1__ENCSR000EG[CG]|UNX3__ENCSR000BRI|E(?:LA__ENCSR000EBD|ST__ENCSR000B(?:J[JQ]|MW|OZ|QP))|XRA__ENCSR000BJW)|(?:SUZ12__ENCSR000EU|BACH1__ENCSR000EB|EBF1__ENCSR000DZ|NFYB__ENCSR000EG)Q|(?:FO(?:XA1__ENCSR000BL|S__ENCSR000EZ)|C(?:EBPB__ENCSR000EH|TCF__ENCSR000B[IQ])|RAD21__ENCSR000DY|EGR1__ENCSR000BN|MAX__ENCSR000FA)E|(?:HCFC1__ENCSR000EF|JUND__ENCSR000EG|TAF1__ENCSR000BJ|CTCF__ENCSR000DZ|MA(?:X__ENCSR000EC|Z__ENCSR000ED))N|(?:S(?:IN3A__ENCSR000BI|MC3__ENCSR000EC)|BRCA1__ENCSR000DZ|MA(?:FK__ENCSR000EB|X__ENCSR000E[DH])|ESR1__ENCSR000BJ)S|(?:M(?:EF2C__ENCSR000BN|AX__ENCSR000DY)|RAD21__ENCSR000EE|ATF3__ENCSR000DO|EGR1__ENCSR000BR|USF2__ENCSR000EH|JUN__ENCSR000ED)G|GA(?:BPA__ENCSR000B(?:HS|JK|LO|PY)|TA(?:1__ENCSR000E(?:X[PR]|WM)|2__ENCSR000(?:BKM|EWG)|3__ENCSR000EXZ))|KAT2A__ENCSR000ECR|(?:RCOR1__ENCSR000DZ|GABPA__ENCSR000BG|M(?:AFF__ENCSR000EE|YC__ENCSR000DY)|CTCF__ENCSR000EI|NRF1__ENCSR000EC)C|XRCC4__ENCSR000FAC|(?:MEF2A__ENCSR000BK|CREB1__ENCSR000BR|GATA2__ENCSR000EY|JUND__ENCSR000EI|TAL1__ENCSR000EH|ELK1__ENCSR000DZ|USF1__ENCSR000BJ)B|ATF2__ENCSR000BQK|SMC3__ENCSR000E[DGH]W|IRF1__ENCSR000EG[LT]|(?:M(?:XI1__ENCSR000E[CD]|YC__ENCSR000DK)|EBF1__ENCSR000BG|FOS__ENCSR000EV|SP2__ENCSR000BO)U|U(?:BTF__ENCSR000EF[WZ]|SF(?:1__ENCSR000B(?:(?:G[IM]|KT|PV)|IU)|2__ENCSR000(?:DZU|EC[DW])))|(?:IRF3__ENCSR000ED|USF(?:1__ENCSR000BM|2__ENCSR000EE)|MAX__ENCSR000[DE]Z)F|JUN__ENCSR000EFA|M(?:AZ__ENCSR000EF[FX]|YC__ENCSR000(?:D(?:L[NRUZ]|M[JMPQ]|OS)|E(?:G[JS]|Z[DUV])|FA[GZ]))|YY1__ENCSR000B(?:K[DJU]|L[TZ]|N[PTX]))_1__m1|eGFP\-(?:GATA2__ENCSR000DKA_1__m1|JUNB__ENCSR000DJY_1__m[12]|(?:JUND__ENCSR000DJX|FOS__ENCSR000DKB)_1__m1)|(?:S(?:MARCA4__ENCSR000EZC|REBF2__ENCSR000DYT)|TAF7__ENCSR000BNM)_1__m(?:10|[2-9])|(?:S(?:MARCA4__ENCSR000EZC|REBF2__ENCSR000DYT)|TAF7__ENCSR000BNM)_1__m1|(?:S(?:MARCB1__ENCSR000EHN|ETDB1__ENCSR000EYD)|POLR2A__ENCSR000ALH|TRIM28__ENCSR000EVY|NELFE__ENCSR000DOF|R(?:AD21__ENCSR000EHX|XRA__ENCSR000BJD)|B(?:CL3__ENCSR000BKG|RF2__ENCSR000DOC)|EZH2__ENCSR000ASY|HSF1__ENCSR000EET)_1__m[1-7]|TBL1XR1__ENCSR000DYZ_1__m[1-4]|(?:SUPT20H__ENCSR000ECQ|SR(?:EBF1__ENCSR000DYU|F__ENCSR000BLK)|T(?:RIM28__ENCSR000EYC|BP__ENCSR000E(?:EL|HA))|ZNF274__ENCSR000E(?:UK|V[GRX])|C(?:EBPZ__ENCSR000ED|UX1__ENCSR000EF)O|E(?:SRRA__ENCSR000DYQ|ZH2__ENCSR000A(?:RI|TC))|NR3C1__ENCSR000BHE|SIN3A__ENCSR000BRM|R(?:BBP5__ENCSR000AQC|COR1__ENCSR000E(?:CM|FG)|FX5__ENCSR000EHY)|ATF3__ENCSR000BPS)_1__m[1-5]|(?:POLR3A__ENCSR000DOI|S(?:ETDB1__ENCSR000EWI|TAT1__ENCSR000DZM|UZ12__ENCSR000EXH)|BCL11A__ENCSR000BIP|CHD1__ENCSR000AQK|EZH2__ENCSR000ARD|RFX5__ENCSR000EFD)_1__m[1-6]|ZNF274__ENCSR000E(?:U[IN]_1__m[1-6]|WY_1__m[1-7])|G(?:TF(?:2(?:F1__ENCSR000ECZ_1__m[1-4]|B__ENCSR000DOE_1__m[1-4])|3C2__ENCSR000DOD_1__m[1-5])|ATA3__ENCSR000BMX_1__m[1-4])|(?:TRIM28__ENCSR000EUZ|CBX3__ENCSR000BRT|EZH2__ENCSR000ARH)_1__m[1-9]|WRNIP1__ENCSR000EAA_1__m[1-3]|(?:GTF3C2__ENCSR000DN|E(?:2F4__ENCSR000DY|SR1__ENCSR000BI))Y_1__m[12]|(?:ZBTB7A__ENCSR000BQ|C(?:CNT2__ENCSR000DO|EBPB__ENCSR000ED)|EGR1__ENCSR000BJ|RFX5__ENCSR000EE|MAZ__ENCSR000DZ)A_1__m1|E(?:ZH2__ENCSR000AQE_1__m(?:10|[2-9])|P300__ENCSR000AQB_1__m[1-8])|KAT2A__ENCSR000DNO_1__m[1-9]|EZH2__ENCSR000AQE_1__m1|CTCF__ENCSR000DR[FH-L]_[12]__m1)$

Time output:
------------

  * Command: grex -c --file /dev/fd/63
  * Elapsed wall time: 0:01.97 = 1.97 seconds
  * Elapsed CPU time:
     - User: 1.75
     - Sys: 0.21
  * CPU usage: 99%
  * Context switching:
     - Voluntarily (e.g.: waiting for I/O operation): 1
     - Involuntarily (time slice expired): 2
  * Maximum resident set size (RSS: memory) (kiB): 895680
  * Number of times the process was swapped out of main memory: 0
  * Filesystem:
     - # of inputs: 0
     - # of outputs: 16
  * Exit status: 0


elemento
^elemento__(?:A(?:TTTGCATA|A(?:(?:CCGG|ATA)|TTAA)TT|CTTCCG)|A(?:A(?:[AG]ATGGC|CAGCT)|C(?:CTGT|A(?:GG|TA))T)G|(?:(?:AATTATG|CA(?:TGCG|ACAA))C|(?:A(?:TCAA|GCTG)|C(?:AAG|CAC)G)TC|CTAATT|(?:A(?:CCGG|TGCA)|C(?:CCGG|TGTC))A)A|CGGAAGTGA|(?:C(?:GCATGCG|ACGTGA)|A(?:AGGTCA|TGGCGG))C|CCCTCCCCC|(?:A(?:ATTTAT|GGGG)G|C(?:G(?:C(?:C(?:TGCG|C[AC])|AGGCG)|TCAT)|(?:AGCT|CCAC)G)|AC(?:TTCCT|GTG[ACG])|ATGACGT|ATCTTAT|ACGCCCA|T(?:TGTTT|G(?:GCA|TTT))A)C|GCC(?:ACGCCC?|CCGCCC)|ATTTGCAT|C(?:GCATGCG|ACGTGA)|CCCTCCCC|C(?:A(?:GGTGAG|CGTG[CG])|C(?:AATC|GGA)AG)|T(?:(?:GAC(?:[AG])?TC|AATTA)|CTCGCG)A|(?:C(?:C(?:TCCT|CGC)|A(?:(?:CGC|TGA)|CTT))|TT?GGCG)CC|CC(?:CCT|GC)CCC|A(?:AGGTCA|TGGCGG)|AGATAAG)$

Time output:
------------

  * Command: grex -c --file /dev/fd/63
  * Elapsed wall time: 0:00.01 = 0.01 seconds
  * Elapsed CPU time:
     - User: 0.01
     - Sys: 0.00
  * CPU usage: 100%
  * Context switching:
     - Voluntarily (e.g.: waiting for I/O operation): 1
     - Involuntarily (time slice expired): 0
  * Maximum resident set size (RSS: memory) (kiB): 7436
  * Number of times the process was swapped out of main memory: 0
  * Filesystem:
     - # of inputs: 0
     - # of outputs: 8
  * Exit status: 0


factorbook
^factorbook__(?:Z(?:NF(?:143\-ext|2(?:63|81))|EB1)|(?:SOX2\-OCT|ELK)4|(?:GATA1|C(?:REB|TCF))\-ext|B(?:HLHE40|ARHL2|\-Box)|ZNF143|(?:(?:SR)?EBF|NR(?:3C|F)|P(?:RDM|U)|T(?:EAD|AL)|MEIS|RUNX|NFKB|E(?:GR|LF|TS)|GFI|HSF|SP|YY)1|(?:POU2F|N(?:R2C|FE)|TCF1|MEF)2|TCF7L2|GATA1|S(?:TAT[12]|RF)|CEBPB|GA(?:TA3|BP)|(?:ESRR|FOX)A|A\-Box|v\-(?:JUN|Maf)|SOX2|C(?:REB|TCF)|M(?:Y(?:OG|C)|AX)|U(?:A(?:1[0-2]|[2-9])|SF)|E(?:2F[14]|SR1)|HNF4|PAX5|R(?:EST|FX5|XRA)|UA1|NFY|AP[12]|TBP)$

Time output:
------------

  * Command: grex -c --file /dev/fd/63
  * Elapsed wall time: 0:00.01 = 0.01 seconds
  * Elapsed CPU time:
     - User: 0.01
     - Sys: 0.00
  * CPU usage: 100%
  * Context switching:
     - Voluntarily (e.g.: waiting for I/O operation): 1
     - Involuntarily (time slice expired): 1
  * Maximum resident set size (RSS: memory) (kiB): 5592
  * Number of times the process was swapped out of main memory: 0
  * Filesystem:
     - # of inputs: 0
     - # of outputs: 0
  * Exit status: 0


flyfactorsurvey
^flyfactorsurvey__(?:(?:CG(?:4360(?:_F1\-3_SANGER_2\.5|\-F1\-3_SOLEXA)_FBgn003878|33557_da_SANGER_5_FBgn005355)|g(?:ce_Clk_SANGER_5_FBgn003062|sb\-n_SOLEXA_5_FBgn000114)|salr\-F3\-5_SOLEXA_FBgn000028|(?:Eip74EF_(?:SANGER_5|FlyReg)_FBgn00005|slp2_SANGER_5_FBgn00045)6|(?:Fer3_da_SANGER_5_FBgn00379|SuH_FlyReg_FBgn00048)3|a(?:se_da_SANGER_10_FBgn000013|op_SANGER_10_FBgn000009)|(?:foxo_SANGER_10_FBgn00381|phol_S(?:ANGER|OLEXA)_5_FBgn00359)9|srp_(?:SANGER_5|FlyReg)_FBgn000350|pnr_SANGER_5_FBgn000311|Dll_(?:SOLEXA|Cell)_FBgn000015|R(?:o_(?:SOLEXA|Cell)_FBgn000326|x_(?:SOLEXA|Cell)_FBgn002061))7|(?:(?:CG3065_F1\-(?:3_S(?:ANGER|OLEXA)|5_SOLEXA)_2\.5_FBgn00349|E5_(?:SOLEXA|Cell)_FBgn00086)4|(?:(?:shn\-F1\-2_S(?:ANGER_5|OLEXA)_FBgn0003|CrebA_SANGER_5_FBgn0004)3|onecut_(?:SOLEXA|Cell)_FBgn00289)9|(?:Cf2\-(?:P(?:A_S(?:ANGER_2\.5|OLEXA)_FBgn00002|B_S(?:ANGER_5|OLEXA)_FBgn00002)|II_FlyReg_FBgn00002)|cic_SANGER_5_FBgn00283)8|C(?:lk_cyc_SANGER_5_FBgn002307|G7745_SANGER_5_FBgn003361)|(?:CG12361_(?:SOLEXA_(?:2_)?FBgn02507|Cell_FBgn02507)|Doc2_SANGER_5_FBgn00359)5|tgo_sim_SANGER_5_FBgn000466|(?:(?:gce|tai)|Met)_Clk_SANGER_5_FBgn002307|ken_S(?:ANGER_10|OLEXA_5)_FBgn001123|tup_SOLEXA_10_FBgn000389|EcR_SANGER_5_FBgn000054|H(?:r4_SANGER_5_FBgn002354|bn_(?:SOLEXA|Cell)_FBgn000863)|v(?:ri_SANGER_5_FBgn001607|nd_FlyReg_FBgn000398)|Exex_(?:SOLEXA|Cell)_FBgn004115|bcd_FlyReg_FBgn000016|Bcd_SOLEXA_FBgn000016|Tup_(?:SOLEXA|Cell)_FBgn000389|Eve_(?:SOLEXA|Cell)_FBgn000060|eve_FlyReg_FBgn000060|Vnd_(?:SOLEXA|Cell)_FBgn000398|(?:Ems_(?:SOLEXA|Cell)_FBgn00005|ems_FlyReg_FBgn00005|Ind_Cell_FBgn00257)7|sens2_SOLEXA_F4\-)6|(?:Blimp\-1(?:\-F1\-CG4360F2\-3_SOLEXA_2\.|_(?:S(?:ANGER_5|OLEXA)_FBgn003562|NAR_FBgn003562))|H(?:LHmgamma_SANGER_(?:5_2|10)_FBgn000273|th_(?:SOLEXA|Cell)_FBgn000123)|Fer1_(?:da_SANGER_10|SANGER_5)_FBgn003747|CG(?:31670_S(?:OLEXA|ANGER)_5_FBgn00313|4136_(?:SOLEXA|Cell)_FBgn00297)7|CG16899_SANGER_5_FBgn003773|M(?:ax_Mnt_SANGER_5_FBgn002321|ed_FlyReg_FBgn001165)|(?:(?:(?:(?:herF1\-ZifF1_herF34|Sug_F3\-5\-2|s(?:na_F2\-4|ob\-F1\-3))|sob\-F3\-5)|ci_F3\-5)|lmd\-F3\-5)_SOLEXA_|Eip78C_SANGER_5_FBgn000486|(?:Ets96B_SANGER_5_FBgn00392|Kr_(?:S(?:ANGER_5|OLEXA)_FBgn00013|(?:FlyReg|NAR)_FBgn00013))2|fd64A_SANGER_5_FBgn000489|luna_S(?:ANGER|OLEXA)_5_FBgn004076|(?:retn_SANGER_5_FBgn00047|Antp_(?:(?:FlyReg|Cell)|SOLEXA)_FBgn00000)9|her_S(?:OLEXA|ANGER)_10_FBgn000118|(?:prd_(?:SOLEXA_5|(?:FlyReg|NAR))_FBgn00031|sd_FlyReg_FBgn00033)4|hth_SOLEXA_2_FBgn000123|Abd(?:\-B_FlyReg|B_(?:SOLEXA|Cell))_FBgn000001|odd_N(?:BT_(?:[12]\.)?5_FBgn000298|AR_FBgn000298)|CG8319\-F3\-5\-SOLEXA_|jim_F1\-4_SOLEXA_2\.)5|(?:(?:disco\-r\-(?:Cl1_SANGER_5|F1\-2_SOLEXA)_FBgn00426|gt_(?:FlyReg|NAR)_FBgn00011)5|(?:l_3_neo38_S(?:OLEXA|ANGER)_2\.5_FBgn00869|CG9895_S(?:ANGER_10|OLEXA_5)_FBgn00348|Ets97D_SANGER_10_FBgn00045|Atf6_SANGER_5_FBgn00330)1|Mio_bigmax_SANGER_5_FBgn003294|(?:Crc_CG6272_SANGER_5_FBgn00003|sc_da_SANGER_10_FBgn00041|H2\.0_(?:SOLEXA|Cell)_FBgn00011)7|HLH54F_da_SANGER_5_FBgn002274|t(?:ap_da_SANGER_5_(?:2_)?FBgn001555|wi_(?:da_SANGER_5|FlyReg)_FBgn000390|ll_(?:FlyReg|NAR)_FBgn000372|oy_FlyReg_FBgn001965)|amos_da_SANGER_10_FBgn000327|(?:CG13424_(?:SOLEXA_(?:2_)?FBgn00345|Cell_FBgn00345)|Atf\-2_SANGER_5_FBgn00504|kni_(?:SANGER_5|(?:FlyReg|NAR))_FBgn00013)2|(?:Ets21c_SANGER_5_FBgn00056|Optix_(?:SOLEXA|Cell)_FBgn00253|So_(?:SOLEXA|Cell)_FBgn00034)6|(?:Poxn_SOLEXA_5_FBgn00031|slp1_NAR_FBgn00034)3|run_Bgb_NBT_FBgn000330|eg_SANGER_5_FBgn000056|Tin_(?:SOLEXA|Cell)_FBgn000411)0|Xrp1_CG6272_SANGER_5_FBgn0(?:036126|261113)|(?:HLH4C_(?:da_SANGER_5_(?:[34]_)?FBgn00112|SANGER_5_FBgn00112)|ftz_FlyReg_FBgn00010|Ftz_(?:SOLEXA|Cell)_FBgn00010)77|(?:CG33980_(?:SOLEXA_(?:2_1?0_FBgn00539|FBgn00539)|Cell_FBgn00539)|scrt_S(?:OLEXA_2\.5_[12]_FBgn00048|ANGER_2\.5_FBgn00048)|hb_(?:S(?:ANGER_2\.|OLEXA_)5_FBgn00011|(?:FlyReg|NAR)_FBgn00011))80|(?:(?:jim_(?:F1\-9_SOLEXA|SANGER)_2\.5_FBgn00273|lmd_S(?:ANGER|OLEXA)_5_FBgn00390|Dfd_(?:(?:FlyReg|Cell)|SOLEXA)_FBgn00004|Scr_(?:SOLEXA|Cell)_FBgn00033)3|(?:crol(?:_F7\-16_SANGER_5|\-F7\-16_SOLEXA)_FBgn00203|H(?:and_da_SANGER_5_FBgn00322|LHm3_SANGER_5_FBgn00026)|dpn_SANGER_10_FBgn00101)0|Mio_bigmax_SANGER_5_FBgn003950|(?:cato_da_SANGER_10_FBgn00242|dei_da_SANGER_5_FBgn00086|ERR_SANGER_5_FBgn00358|Achi_(?:SOLEXA|Cell)_FBgn00337)4|CG7368_S(?:OLEXA_2\.|ANGER_)5_FBgn003617|Ets98B_SANGER_10_FBgn000565|Bt(?:eb2_S(?:ANGER|OLEXA)_2\.5_FBgn002567|n_(?:SOLEXA|Cell)_FBgn001494)|(?:disco_S(?:ANGER|OLEXA)_5_FBgn00004|bin_(?:SANGER_5|FlyReg)_FBgn00457|Ci_SANGER_5_FBgn00048|ci_SOLEXA_FBgn00048)5|(?:Poxm_SOLEXA_5_FBgn00031|Bsh_(?:SOLEXA|Cell)_FBgn00005)2|Hr(?:39_SANGER_5_FBgn001022|78_SANGER_5_FBgn001523)|Pph13_SOLEXA_FBgn002348|(?:Deaf1_FlyReg_FBgn00137|Her_SANGER_5_FBgn00308|sr_S(?:ANGER|OLEXA)_5_FBgn00034)9|Caup_(?:SOLEXA|Cell)_FBgn001591|Ap_(?:SOLEXA|Cell)_FBgn000009|ap_FlyReg_FBgn000009|fkh_NAR_FBgn000065)9|(?:H(?:LH(?:mdelta_SANGER_10_FBgn000273|106_SANGER_(?:5_[1-3]_FBgn001523|10_FBgn001523))|nf4_SANGER_(?:10|5)_FBgn000491)|(?:tgo_(?:(?:sima_SANGER_5_FBgn001|(?:s(?:im|s)_SANGER_5_FBgn001|cyc_SANGER_5_FBgn001))50|t(?:ai|rh)_SANGER_5_FBgn00150)|(?:(?:dys_tgo_SANGER_5|ss_tgo_SANGER_10)_FBgn0015|Abd(?:\-A_FlyReg|A_(?:SOLEXA|Cell))_FBgn0000)0)1|C(?:lk_cyc_SANGER_5_FBgn002309|G4328_(?:SOLEXA|Cell)_FBgn003627)|tgo_cyc_SANGER_5_FBgn002309|CG17181_S(?:ANGER|OLEXA)_5_FBgn003514|(?:pdm2_SOLEXA_5_FBgn00043|crp_SANGER_10_FBgn00019|Aef1_(?:S(?:ANGER_5|OLEXA)_FBgn00056|FlyReg_FBgn00056))9|Six4_(?:SOLEXA_(?:2_)?FBgn00273|Cell_FBgn00273)6|(?:dsx\-[FM]_FlyReg_FBgn00005|hkb_NAR_FBgn00012)0|nub_(?:SOLEXA_5|(?:FlyReg|NAR))_FBgn008542|usp_SANGER_5_FBgn000396|PhdP_SOLEXA_FBgn002533|U(?:nc4_(?:SOLEXA|Cell)_FBgn002418|bx_(?:(?:FlyReg|Cell)|SOLEXA)_FBgn000394)|tj_SANGER_5_FBgn000096|Ara_(?:SOLEXA|Cell)_FBgn001590|Otp_(?:SOLEXA|Cell)_FBgn001552|(?:l_3_neo38|(?:(?:her|rn)|klu))_SOLEXA_F2\-)4|Crc_CG6272_SANGER_5_FBgn0036126|(?:peb\-F(?:1\-3_S(?:ANGER_2\.5|OLEXA)|5\-7_SOLEXA)_FBgn000305|(?:HLHm(?:beta_SANGER_10_FBgn00027|7_SANGER_5_FBgn00026)|CG15696_(?:SOLEXA|Cell)_FBgn00388|btd_NAR_FBgn00002)3|C(?:G3(?:407_S(?:ANGER|OLEXA)_2\.5_FBgn003157|1670_SOLEXA_F1\-)|15_(?:SOLEXA|Cell)_FBgn000486)|ato_da_SANGER_(?:5_[23]_FBgn001043|10_FBgn001043)|M(?:et_(?:Clk_)?SANGER_5_FBgn000272|irr_(?:SOLEXA|Cell)_FBgn001434)|sens_S(?:ANGER_10|OLEXA_5)_FBgn000257|(?:G(?:ATAd_SANGER_5_FBgn00322|sc_(?:SOLEXA|Cell)_FBgn00103)|knrl_SANGER_5_FBgn00013|Lim3_(?:SOLEXA|Cell)_FBgn00020)2|wor_S(?:ANGER|OLEXA)_2\.5_FBgn000198|bowl_S(?:ANGER_5|OLEXA)_FBgn000489|run_Bgb_NBT_FBgn001375|Zen_(?:SOLEXA|Cell)_FBgn000405|byn_FlyReg_FBgn001172|(?:sens|(?:Sqz|pho))_SOLEXA_F1\-)3|(?:(?:(?:CG33557_da_SANGER_5_FBgn000|H(?:LH(?:4C_da_SANGER_5_(?:[34]_)?FBgn000|54F_da_SANGER_5_FBgn000)|and_da_SANGER_5_FBgn000)|(?:cato_da_SANGER_10|sage_da_SANGER_5)_FBgn000|Oli_da_SANGER_5_[1-3]_FBgn000|tap_da_SANGER_5_(?:2_)?FBgn000|Fer(?:(?:1_da_SANGER_10|2_da_SANGER_5)|3_da_SANGER_5)_FBgn000|d(?:imm_da_SANGER_5|a_SANGER_10)_FBgn000)0|(?:(?:l_1_sc_da_SANGER_5|sc_da_SANGER_10)|dei_da_SANGER_5)_FBgn0000|n(?:et_da_SANGER_10|au_da_SANGER_5)_FBgn0000|twi_da_SANGER_5_FBgn0000)4|a(?:(?:to_da_SANGER_(?:5_[23]_FBgn0000|10_FBgn0000)|(?:se_da_SANGER_10|c_da_SANGER_5)_FBgn0000)|mos_da_SANGER_10_FBgn0000)4|ss_tgo_SANGER_10_FBgn00035|tgo_ss_SANGER_5_FBgn00035|Sox15_SANGER_5_FBgn00056)13|(?:l_1_sc_da_SANGER_5_FBgn000256|(?:Oli_da_SANGER_5_[1-3]_FBgn0032|svp_SANGER_5_FBgn0003)65|(?:CG12605_S(?:ANGER_10|OLEXA_5)_FBgn00354|dsf_SANGER_5_FBgn00153|Pb_(?:SOLEXA|Cell)_FBgn00514)8|(?:dimm_da_SANGER_5_FBgn00230|E_spl__SANGER_5_FBgn00005)9|(?:net_da_SANGER_10_FBgn00029|CG34031_SOLEXA_FBgn00540)3|(?:(?:dys_tgo_SANGER_5_FBgn0039|D_NAR_FBgn0000)4|lim_SOLEXA_2_FBgn00264|Usf_SANGER_5_FBgn00297|Lim1_(?:SOLEXA|Cell)_FBgn00264|grh_FlyReg_FBgn02592)1|e(?:sg(?:\-F3\-5_SOLEXA|_SANGER_2\.5)_FBgn000198|xd_(?:SOLEXA_2|FlyReg)_FBgn000061)|GATAe_SANGER_5_FBgn003839|HLHm5_SANGER_5_FBgn000263|S(?:ide_SANGER_5_FBgn003274|lou_(?:SOLEXA|Cell)_FBgn000294)|Repo_(?:SOLEXA|Cell)_FBgn001170|sv_SOLEXA_5_FBgn000556|Unpg_(?:SOLEXA|Cell)_FBgn001556|(?:Awh_(?:SOLEXA|Cell)_FBgn00137|cad_FlyReg_FBgn00002|Cad_(?:SOLEXA|Cell)_FBgn00002)5|Lbl_(?:SOLEXA|Cell)_FBgn000865|Exd_(?:SOLEXA|Cell)_FBgn000061|Al_(?:SOLEXA|Cell)_FBgn000006)1|(?:(?:sens(?:\-2_SANGER_2\.5|2_SOLEXA)_FBgn00516|pan_FlyReg_FBgn00854)3|t(?:go_(?:sima_SANGER_5_FBgn001554|tai_SANGER_5_FBgn004109)|ai_Clk_SANGER_5_FBgn004109)|(?:sage_da_SANGER_5_FBgn00376|rn_S(?:ANGER_10|OLEXA_5)_FBgn02591)7|dm_Max_SANGER_10_FBgn000047|Fer2_da_SANGER_5_FBgn003840|(?:Sox14_SANGER_10_FBgn00056|Hr51_SANGER_5_FBgn00340|Ptx1_(?:SOLEXA|Cell)_FBgn00209)1|CG(?:32532_(?:SOLEXA|Cell)_FBgn005253|11617_(?:SOLEXA|Cell)_FBgn003123|7056_(?:SOLEXA|Cell)_FBgn003885)|(?:CG18599_(?:SOLEXA|Cell)_FBgn00385|sob_S(?:ANGER_10|OLEXA_5)_FBgn00048|Dr_(?:SOLEXA|Cell)_FBgn00004)9|Mitf_SANGER_5_FBgn026311|sug_S(?:ANGER|OLEXA)_5_FBgn003378|(?:O(?:pa_SANGER_5_FBgn00030|c_(?:SOLEXA|Cell)_FBgn00041)|opa_(?:SOLEXA|NAR)_FBgn00030)0|Bap_(?:SOLEXA|Cell)_FBgn000486|dl_(?:FlyReg|NBT)_FBgn000046)2|(?:CG8319_SOLEXA_2\.5_FBgn00377|nau_(?:da_)?SANGER_5_FBgn00029|Hsf_FlyReg_FBgn00012|Lab_(?:SOLEXA|Cell)_FBgn00025)22|CG(?:2052_S(?:ANGER|OLEXA)_2\.5_FBgn00399|32105_(?:SOLEXA|Cell)_FBgn00521)05|(?:CG12029_S(?:ANGER_10|OLEXA_5)_FBgn00354|BH2_(?:SOLEXA|Cell)_FBgn00048)54|kay_Jra_SANGER_5_FBgn000129[17]|(?:(?:Eip93F_SANGER_10_FBgn00139|sna_(?:S(?:ANGER_10|OLEXA_5)_FBgn0003|FlyReg_FBgn0003)4|H(?:r46_(?:SANGER_5|FlyReg)_FBgn00004|mx_(?:SOLEXA|Cell)_FBgn00854)|gsb_SOLEXA_5_FBgn00011|Vis_(?:SOLEXA|Cell)_FBgn00337)4|dm_Max_SANGER_10_FBgn001757|Ma(?:x_Mnt_SANGER_5_FBgn001757|d_FlyReg_FBgn001164)|Eip75B_SANGER_5_FBgn000056|(?:ftz\-f1_(?:SANGER_5|FlyReg)_FBgn00010|Sp1_S(?:OLEXA_2\.|ANGER_)5_FBgn00203|Lbe_(?:SOLEXA|Cell)_FBgn00112)7|C(?:G11085_(?:SOLEXA|Cell)_FBgn003040|t_(?:SOLEXA|Cell)_FBgn000419)|(?:slbo_SANGER_5_FBgn00056|cwo_SANGER_5_FBgn02599)3|pdm3_SOLEXA_5_FBgn003328|acj6_SOLEXA_5_FBgn000002|(?:sqz_S(?:ANGER|OLEXA)_5_FBgn00107|h_(?:SANGER_5|NAR)_FBgn00011)6|Hey_SANGER_5_FBgn002778|(?:pnt_SANGER_5_FBgn00031|Rel_SANGER_5_FBgn00140|Hgtx_(?:SOLEXA|Cell)_FBgn00403)1|ovo_(?:S(?:ANGER|OLEXA)_5_FBgn0003|FlyReg_FBgn0003)02|Lag1_(?:SOLEXA|Cell)_FBgn004091)8|(?:Ets65A_SANGER_10_FBgn00056|CG11294_(?:SOLEXA|Cell)_FBgn00300|Odsh_(?:SOLEXA|Cell)_FBgn00260|BH1_(?:SOLEXA|Cell)_FBgn00117)58|(?:CG5669_S(?:ANGER_10|OLEXA_5)_FBgn00391|klu_S(?:ANGER_10|OLEXA_5)_FBgn00134)69|ac_da_SANGER_5_FBgn0000022|(?:pho_(?:S(?:ANGER_10|OLEXA_5)|FlyReg)_FBgn00025|CG9876_(?:SOLEXA|Cell)_FBgn00348)21|N(?:FAT_SANGER_5_FBgn0030505|K7\.1_(?:SOLEXA|Cell)_FBgn0024321)|zen2_SOLEXA_2_FBgn0004054|vvl_(?:SOLEXA_5|FlyReg)_FBgn0086680|inv_SOLEXA_[25]_FBgn0001269|e(?:n_(?:SOLEXA_2|FlyReg)_FBgn0000577|y_(?:SOLEXA_5|FlyReg)_FBgn0005558)|Zen2_(?:SOLEXA|Cell)_FBgn0004054|En_(?:SOLEXA|Cell)_FBgn0000577|Inv_Cell_FBgn0001269)$

Time output:
------------

  * Command: grex -c --file /dev/fd/63
  * Elapsed wall time: 0:11.83 = 11.83 seconds
  * Elapsed CPU time:
     - User: 10.46
     - Sys: 1.36
  * CPU usage: 99%
  * Context switching:
     - Voluntarily (e.g.: waiting for I/O operation): 1
     - Involuntarily (time slice expired): 23
  * Maximum resident set size (RSS: memory) (kiB): 4917700
  * Number of times the process was swapped out of main memory: 0
  * Filesystem:
     - # of inputs: 0
     - # of outputs: 32
  * Exit status: 0


hdpi
^hdpi__(?:H(?:IST(?:1H2BN|2H2BE)|NRP(?:A[01]|C)|SPA5|2AF[YZ]|OXB9|1FX|H(?:AT|EX)|LCS)|(?:HIST2H2A|P(?:PP2R3|4H)|FAM1(?:19|27)|C(?:KMT1|SNK2)|MEF2|UQCR|ETF)B|R(?:NASEH2C|B(?:M(?:35[AB]|[79])|BP[59])|A(?:B1[48]|R[ABG]|[NX])|FX[34]|PL6)|(?:TIMELES|CYC)S|K(?:IAA0907|LF[34])|(?:FLJ3707|MAGEA|RNF13|DGCR|UTP1|HDAC)8|(?:C(?:1orf17|9orf15|CDC1|NOT)|THRAP|D(?:HX3|LX)|PSMA|MYF|LSM)6|(?:M(?:GC1043|SRB|EIS)|N(?:UP13|KX2\-|FIL|XPH)|PO(?:U4F|LE)|PIK3C|EXOSC|GTF2H|H(?:NRPH|OX(?:B1|D))|(?:H(?:IRI|P1B)|SSB|VAM)P|D(?:DX5|IS)|RUFY|T(?:MSL|CF|P7)|ING)3|(?:C19orf4|PPP1R1|SNRP7|TRIP1|DDX2|RPS1)0|(?:C(?:19orf|CDC)2|LOC5103|RP(?:S6KA|L3|P2)|P(?:DLIM|RDX)|MRPS2|THAP|HES)5|(?:M(?:GC1033|AGED)|(?:TSC22|MX)D|TIMM4|ZNF(?:30|12)|CPSF|FOXP|LASS|OTUD|BAT|AFF|IL2|ETV)4|B(?:RUNOL[4-6]|A[DX])|(?:T(?:GIF2L|SNA)|RPS4|CAN|SMP|ML)X|JARID1[AD]|(?:GADD45|BCL11|DNMT3|PHOX2|SEMA4|T(?:IMM8|AF1)|HMG20|R(?:AB[27]|BM8)|ESRR|RXR)A|(?:S(?:LC18A|UCLG|CMH|F3B|TUB|MUG|[NO]D)|(?:ASPSC|CYB5)R|(?:CREB3|DDEF|NMRA|PLAG|RUVB|TBP)L|(?:(?:(?:ARFG|CDK2)|DAZ)A|P(?:AXI|QB)|TUL)P|LRRFIP|M(?:A(?:GEF|PK)|OR[GN])|P(?:DCD1|ICK)|(?:ADAR|NUC)B|CENTG|(?:AKR1|COBR|NOL)A|T(?:RIM2|IA|PI)|UBE2V|NAP1L|F(?:IP1L|OXM|OSL|LI)|(?:PTP|TR)MT|(?:NANO|CHE)S|KCNIP|(?:M(?:THF|YO)|S(?:FT2|RB)|PTC|TEA)D|RBMS|(?:AGG|NR2|PHT|U2A)F|E(?:WSR|BF|DN|NO|SX|TS)|G(?:RHL|OT|PD)|H(?:CLS|SF)|(?:XR|AS)CC|(?:BAR|P(?:IT|RR)|EV)X|ACO|DR\-|NME|CLK|ODC|VSX)1|Z(?:C(?:CHC1[47]|3H7A)|DHHC1?5|NF(?:32[36]|2(?:0[57]|38|6)|7(?:66|06|1)|19[23]|313|(?:25|72|16)0|5(?:03|10))|BTB4[36]|(?:NF(?:38|6[59])|BTB2)5|(?:NF(?:13|67)|BED)1|SWIM1|MAT[24]|(?:FP|HX)3)|(?:S(?:C(?:C\-11|AND)|PATS|NRPB|TAU)|CBFA2T|P(?:K(?:NOX|M)|SMC)|(?:MAP4|PC)K|R(?:3HDM|BM2|IOK)|MBTPS|T(?:AGLN|ROVE|OB)|(?:POU3|ABC|CST|MYE)F|PHLDA|E(?:IF5A|LF)|Z(?:BTB1|RSR)|APEX|(?:PGA|MD)M|RKHD|FEZF|KIF2|HCFC|DAB|GIT|HIP|(?:CF|FH)L|V(?:AX|IL)|ID)2|(?:HTATI|M(?:CT|EC)|NCB|UG|JD)P2|A(?:NXA11|CF)|DIABLO|S(?:NAPC[45]|MAD[2-4]|F1|PR)|DUSP2[26]|T(?:CEAL[26]|F(?:A(?:P2[AC]|M)|E[3B])|GIF1|AF9|PPP)|(?:TRIM6|USP3|CD5|SRP)9|PRKRIR|(?:RFXAN|MYL)K|G(?:T(?:F(?:3C[25]|2B)|PBP[16])|LYCTK|RHPR|PAM)|(?:NFATC|SOX1)[34]|(?:NUP10|RBM1|SPAG|CBX)7|(?:SM(?:AP1|CR7)|H(?:SPA1|NRPL)|ARNT|D(?:US3|T)|NOC2|BOL)L|Y(?:EATS4|WHA[EZ])|ANXA1|Z(?:NF(?:76|3)|BTB4)|C(?:REB1|BFB|AT)|DDX43|CEBPG|MAGOH|P(?:DE6H|AX3|OLI|URG|IR|LG)|PPP5C|(?:NCAL|IV)D|EEF1D|F(?:GF19|EZ1)|(?:ECSI|NN)T|(?:M(?:RPL|SI)|NR4A|USF)[12]|L(?:A(?:RP[14]|S1L)|UZP[12])|OLIG[13]|VPS4B|INSM1|W(?:HSC|ISP)2|SOCS4|DDX4|RBM3|T(?:HRA|SN)|MSRA|N(?:FI[BX]|ONO|MI|RL)|PRNP|IRF[16]|AVEN|(?:RFC|SSX)[23]|LHX[24]|UBB|XG)$

Time output:
------------

  * Command: grex -c --file /dev/fd/63
  * Elapsed wall time: 0:00.12 = 0.12 seconds
  * Elapsed CPU time:
     - User: 0.12
     - Sys: 0.00
  * CPU usage: 100%
  * Context switching:
     - Voluntarily (e.g.: waiting for I/O operation): 1
     - Involuntarily (time slice expired): 3
  * Maximum resident set size (RSS: memory) (kiB): 42020
  * Number of times the process was swapped out of main memory: 0
  * Filesystem:
     - # of inputs: 0
     - # of outputs: 0
  * Exit status: 0


hocomoco
^hocomoco__(?:(?:(?:(?:(?:(?:(?:NR1D1_HUMAN\.H11MO\.0|FOXJ3_MOUSE\.H11MO\.1|(?:(?:(?:FOXJ3|MAF)|MEIS1)|NANOG)_HUMAN\.H11MO\.1|SOX10_HUMAN\.H11MO\.0|SOX10_MOUSE\.H11MO\.0|(?:(?:NR1H3|(?:N(?:R1H4|FAC1|KX61)|OLIG2|P(?:PAR|TF1)A|RFX1|MAFF))|SOX9)_HUMAN\.H11MO\.[01]|(?:TWST1|P[67]3|SP4)_MOUSE\.H11MO\.[01]|KAISO_MOUSE\.H11MO\.[0-2]|RARG_HUMAN\.H11MO\.[01]|ATF2_HUMAN\.H11MO\.[01]|COT2_MOUSE\.H11MO\.[12]|COT1_MOUSE\.H11MO\.0|BRAC_(?:HUMAN\.H11MO\.1|MOUSE\.H11MO\.0)|RXRG_MOUSE\.H11MO\.[01]|SP2_(?:HUMAN\.H11MO\.1|MOUSE\.H11MO\.0)|WT1_(?:HUMAN\.H11MO\.1|MOUSE\.H11MO\.0)|ZFX_MOUSE\.H11MO\.[01])|(?:(?:(?:(?:(?:(?:(?:(?:ATF6A|RXRG)|MZF1)|GLI3)|RFX3)_H|N(?:R6A1|FAC2)_H|(?:E(?:PAS1|RR3|2F7)|HNF4G|NFKB2)_H|(?:CEBPG|F(?:OXO3|EV)|M(?:EIS2|AFB|BD2)|NFAC3|S(?:R(?:BP2|Y)|MAD3|P3)|(?:ATOH|FOXI|EVI|STF)1|THA11|A(?:LX1|P2B|TF1|HR)|E(?:2F[25]|LK1|TV4|HF)|HXA9|DBP)_H|Z(?:N322|IC1)_H|SOX3_H|ARNT_H)|REL_H)|(?:B(?:ATF3|HA15)|FOXA3|N(?:R(?:2C|5A)2|KX25|DF2)|PKNX1|S(?:TAT6|ALL4|MAD4|OX4)|TF(?:7L1|E3)|Z(?:KSC1|IC3)|ETV2|H(?:NF6|XB4)|IRF[38]|MYOG|ETS2|CRX)_H)|KLF3_H)UMAN\.H11MO\.0)|(?:(?:(?:(?:(?:(?:(?:CEBPD|NKX32|RORG|ITF2)|PDX1)|TBX3)|PRD16)|ARNT)|(?:CEBPG|F(?:OXO3|EV)|M(?:EIS2|AFB|BD2)|NFAC3|S(?:R(?:BP2|Y)|MAD3|P3)|(?:ATOH|FOXI|EVI|STF)1|THA11|A(?:LX1|P2B|TF1|HR)|E(?:2F[25]|LK1|TV4|HF)|HXA9|DBP))_M|Z(?:(?:FP57|IC1)|N322)_M)OUSE\.H11MO\.0)|(?:N(?:R4A1|FYC)|PO2F2|SRBP1|ZBT7A|EL(?:F3|K4)|IRF2|KLF6)_MOUSE\.H11MO\.0)|(?:FOXM|ZEB)1_MOUSE\.H11MO\.0)|LEF1_MOUSE\.H11MO\.0)\.B|(?:NR1D1_MOUSE\.H11MO\.0|FOXJ3_MOUSE\.H11MO\.0|(?:(?:(?:FOXJ3|MAF)|MEIS1)|NANOG)_HUMAN\.H11MO\.0|SOX10_HUMAN\.H11MO\.1|SOX10_MOUSE\.H11MO\.1|(?:(?:(?:(?:(?:GATA2|PBX3)|(?:(?:RXRA|COT2)|PDX1))|TAL1)|(?:TWST1|P[67]3|SP4))|RFX5)_HUMAN\.H11MO\.[01]|(?:(?:(?:MEIS1|(?:ANDR|MAF))|NANOG)_M|P(?:RDM5|O3F2)_M|(?:N(?:R1H4|FAC1|KX61)|OLIG2|P(?:PAR|TF1)A|RFX1|MAFF)_M|SOX9_M)OUSE\.H11MO\.[01]|(?:G(?:ATA1|CR)|H(?:NF1B|SF1)|(?:M(?:YOD|XI)|FLI)1|P(?:O5F1|PARG|53)|S(?:TAT|P)1|RFX2|E(?:2F4|GR2|SR[12])|MA(?:F[GK]|Z)|NFIC|PRGR|VDR)_(?:HUMAN\.H11MO\.[01]|MOUSE\.H11MO\.[01])|Z(?:N(?:263_HUMAN\.H11MO\.[01]|335_(?:HUMAN\.H11MO\.[01]|MOUSE\.H11MO\.[01]))|FX_HUMAN\.H11MO\.[01])|(?:NR1H3|RXRA)_MOUSE\.H11MO\.[0-2]|KAISO_HUMAN\.H11MO\.[0-2]|RARA_MOUSE\.H11MO\.[0-3]|COT2_MOUSE\.H11MO\.0|PBX1_(?:HUMAN\.H11MO\.0|MOUSE\.H11MO\.[01])|BRAC_HUMAN\.H11MO\.0|(?:BATF|SOX2)_(?:HUMAN\.H11MO\.[01]|MOUSE\.H11MO\.[01])|(?:RARA|ANDR)_HUMAN\.H11MO\.[0-2]|SP2_HUMAN\.H11MO\.0|WT1_MOUSE\.H11MO\.1)\.A|(?:(?:(?:(?:(?:(?:(?:BACH1|PO3F2)|(?:BC11A|FOX[HP]1|HXB13|MEF2B|DUX4|ETV1|SIX1))|TFAP4)|ZN274)|(?:N(?:R4A1|FYC)|PO2F2|SRBP1|ZBT7A|EL(?:F3|K4)|IRF2|KLF6))|(?:FOXM|ZEB)1)|LEF1)_HUMAN\.H11MO\.0\.A|(?:(?:(?:(?:(?:(?:(?:(?:(?:(?:FOXP|ATF)2|HNF1A)|NKX22)|(?:NR1D2|CDX4))|SP7)|(?:GATA2|PBX3))|TAL1)|REL)|(?:B(?:ATF3|HA15)|FOXA3|N(?:R(?:2C|5A)2|KX25|DF2)|PKNX1|S(?:TAT6|ALL4|MAD4|OX4)|TF(?:7L1|E3)|Z(?:KSC1|IC3)|ETV2|H(?:NF6|XB4)|IRF[38]|MYOG|ETS2|CRX))|KLF3)_MOUSE\.H11MO\.0\.A|(?:R(?:UNX[1-3]|EST)|A(?:SCL1|P2[AC]|TF[34])|B(?:ACH2|HE40)|C(?:REB1|TCFL|EBP[ABE]|DX2)|FO(?:X(?:A[12]|O1)|SB)|G(?:FI1B|A(?:BPA|TA[346])|RHL2)|H(?:NF4A|SF2|TF4)|M(?:EF2[ACD]|YCN|ITF|AX)|N(?:F(?:KB1|Y[AB])|KX21|DF1)|P(?:RD(?:14|M1)|AX5)|NF2L2|S(?:TA(?:5[AB]|T[2-4])|MAD2|NAI2|PI[1B]|IX2|RF|UH)|T(?:B(?:X21|P)|EAD[14]|F(?:7L2|65|E2)|CF7)|(?:T(?:GIF|YY)|ISL)1|Z(?:FP42|N(?:143|281)|BT17)|KLF(?:15|[45])|(?:FOXK|COE|NRF|TAF)1|BMAL1|E(?:R(?:R[12]|G)|2F[136]|GR1|LF[15]|VX2)|IRF[14]|JUN[BD]|ETS1|OTX2|NFE2|L(?:HX2|YL1))_(?:HUMAN|MOUSE)\.H11MO\.0\.A|FOSL[12]_(?:HUMAN|MOUSE)\.H11MO\.0\.A|(?:NR1D1_HUMAN\.H11MO\.1|N(?:R1I[23]|FIA)_MOUSE\.H11MO\.1|(?:N(?:R1I[23]|FIA)_H|TH[AB]_H)UMAN\.H11MO\.1|HAND1_HUMAN\.H11MO\.[01]|Z(?:N(?:(?:350|418|394|554)|708)_HUMAN\.H11MO\.1|BTB4_HUMAN\.H11MO\.[01])|RARG_HUMAN\.H11MO\.2)\.D|(?:(?:(?:(?:(?:(?:(?:(?:(?:(?:(?:NR6A1|GLI3)|M(?:YF5|SX3))|SALL1)|THB)|(?:SOX17|TFDP1|ETV5))_M|ZBT(?:18|B6)_M)|(?:HXB1|TBX2)_M)|(?:A(?:RNT2|P2D|TF7)|B(?:ARX2|HE41)|CEBPZ|FOX(?:C2|D1|P3)|G(?:LI(?:S3|2)|ATA5)|H(?:X(?:D(?:1[03]|[49])|A[57]|B6|C[68])|LTF|E(?:S1|Y2))|CDC5L|M(?:LXPL|AFA|YBB|SX2|CR)|N(?:R(?:1H2|2F6|4A3)|FAT5)|O(?:NEC2|TX1)|ARI3A|P(?:ITX2|RRX1|O(?:4F2|6F1)|PARD|AX[238]|URA)|S(?:OX1[358]|MAD1)|T(?:E(?:AD3|F)|FCP2|BX5)|(?:FOXF|HMGA)[12]|Z(?:FHX3|N(?:148|423)|EP[12])|RARB|DLX2|E(?:GR[34]|LK3)|IRF5|GCM1)_M)|(?:BRCA|CXXC|HESX|RREB|NR0B|PLAG|E4F|SPZ|TLX)1_M)|(?:FU|H)BP1_M)|UBIP1_M)OUSE\.H11MO\.0\.D|(?:(?:(?:(?:(?:(?:(?:(?:NKX22_|(?:S(?:HOX|OX1)_|TBX1_|(?:(?:ML|R)X|GSC)_))|(?:B(?:CL6B|SH)|CREB[35]|E(?:OMES|2F8|TV[37])|FOX(?:D2|L1|O6)|G(?:LIS[12]|RHL1)|H(?:X(?:A(?:11|2)|C1[0-3]|D(?:1[12]|[38])|B[23])|OMEZ|E(?:S[57]|Y1)|IC2|MX[1-3]|SF4)|BHE2[23]|M(?:EIS3|YNN|GAP|SX1)|N(?:R(?:2E1|L)|KX(?:23|62)|OTO)|O(?:LIG[13]|NEC3)|CENPB|P(?:5F1B|ITX3|RDM4|O(?:2F3|3F[34]|4F[13]|6F2)|AX[147])|S(?:P(?:DEF|IC)|HOX2|OX(?:11|21|[78]))|T(?:BX(?:1[59]|4)|F2LX)|(?:BARH|CR3L|SCRT|GSX|HME)[12]|(?:MEO|EM|GB)X[12]|V(?:ENTX|AX[12]|SX1)|FIGLA|(?:T(?:GIF|YY)|ISL)2|(?:RHXF|CPEB|FOX[BG]|HSFY|[DH]MBX|M(?:IXL|ESP|NX)|P(?:ROX|LAL)|ESX|TBR)1|Z(?:F64A|N(?:2(?:19|82)|333|410|5(?:24|89)|7(?:13|40))|B(?:ED1|T(?:49|7B))|KSC3|SC16|IC4)|KLF1[346]|(?:GMEB|ZN(?:23|65)|RAX|JDP)2|PHX2[AB]|L(?:MX1[AB]|BX2|HX[489])|RFX4|A(?:LX[34]|RX)|D(?:LX[146]|UXA)|I(?:RX[23]|SX)|GCM2|BPTF|GSC2|D(?:PR|RG)X)_)|(?:Z(?:N78|SCA)|ID)4_)|(?:HXB1|TBX2)_)|(?:A(?:RNT2|P2D|TF7)|B(?:ARX2|HE41)|CEBPZ|FOX(?:C2|D1|P3)|G(?:LI(?:S3|2)|ATA5)|H(?:X(?:D(?:1[03]|[49])|A[57]|B6|C[68])|LTF|E(?:S1|Y2))|CDC5L|M(?:LXPL|AFA|YBB|SX2|CR)|N(?:R(?:1H2|2F6|4A3)|FAT5)|O(?:NEC2|TX1)|ARI3A|P(?:ITX2|RRX1|O(?:4F2|6F1)|PARD|AX[238]|URA)|S(?:OX1[358]|MAD1)|T(?:E(?:AD3|F)|FCP2|BX5)|(?:FOXF|HMGA)[12]|Z(?:FHX3|N(?:148|423)|EP[12])|RARB|DLX2|E(?:GR[34]|LK3)|IRF5|GCM1)_)|(?:BRCA|CXXC|HESX|RREB|NR0B|PLAG|E4F|SPZ|TLX)1_)|(?:FU|H)BP1_)H|U(?:BIP1|NC4)_H)UMAN\.H11MO\.0\.D|(?:NR1D1_MOUSE\.H11MO\.1|N(?:R1I[23]|FIA)_MOUSE\.H11MO\.0|(?:N(?:R1I[23]|FIA)_H|TH[AB]_H)UMAN\.H11MO\.0|(?:(?:(?:(?:(?:HAND1|RARG)|RFX3)|NFAC2)|(?:RFX6|SP5))_MOUSE|T(?:F2L1|HA)_MOUSE)\.H11MO\.[01]|(?:PATZ|VEZF)1_HUMAN\.H11MO\.[01]|ZN(?:(?:(?:350|418|394|554)|708)_HUMAN\.H11MO\.0|(?:F85|134|F41|341|563|770)_HUMAN\.H11MO\.[01]|816_HUMAN\.H11MO\.[01])|ATF2_HUMAN\.H11MO\.2|PBX1_(?:HUMAN\.H11MO\.1|MOUSE\.H11MO\.2)|COT1_MOUSE\.H11MO\.1|BRAC_MOUSE\.H11MO\.1|COT1_HUMAN\.H11MO\.[01]|SP2_MOUSE\.H11MO\.1|WT1_HUMAN\.H11MO\.0)\.C|(?:(?:(?:(?:(?:(?:(?:(?:FOXP2|HNF1A)|(?:CEBPD|NKX32|RORG|ITF2))|TBX3)|(?:SOX17|TFDP1|ETV5))_H|ZBT(?:18|B6)_H|(?:PRDM6|SMCA1|(?:FEZF|THAP)1|Z(?:FP28|N(?:F76|1(?:36|40)|2(?:14|5[07]|6[04])|3(?:2[09]|31|8[24])|4(?:36|49)|5(?:28|4[79]|8[26])|(?:31|46)7|490|6(?:67|80)|F18|768)|3[25]4A|BT(?:14|48)|(?:FP8|N50)2|N121|SC(?:22|31)|IM3)|HXC9|OSR2|OZF)_H|KLF(?:12|9)_H|ZNF8_H)|(?:GFI|HXA)1_H)|(?:C(?:LOCK|REM|DX1)|FOX(?:C1|J2|O4)|H(?:I(?:F1A|NFP|C1)|X(?:A1[03]|B[78])|LF)|(?:FOXQ|INSM|HEN)1|IKZF1|M(?:ECP2|YF6|TF1)|N(?:R(?:2(?:C1|E3)|4A2)|FAC4|OBOX|KX(?:28|31))|OVOL1|ARI5B|P(?:RRX2|O[23]F1|AX6|BX2|EBB|IT1)|NF2L1|S(?:(?:MCA|OX)5|NAI1)|R(?:(?:XR|EL)B|ORA)|AIRE|DLX3|ELF2|IRF[79]|CUX1|TFEB|KLF8)_H)|LHX3_H)UMAN\.H11MO\.0\.C|(?:(?:(?:(?:(?:(?:(?:BACH1|(?:E(?:PAS1|RR3|2F7)|HNF4G|NFKB2))|SOX3)|(?:DMRTB|FOXL2|MSGN1|PRDM9|SIX4))|ZN431)|(?:GFI|HXA)1)|(?:C(?:LOCK|REM|DX1)|FOX(?:C1|J2|O4)|H(?:I(?:F1A|NFP|C1)|X(?:A1[03]|B[78])|LF)|(?:FOXQ|INSM|HEN)1|IKZF1|M(?:ECP2|YF6|TF1)|N(?:R(?:2(?:C1|E3)|4A2)|FAC4|OBOX|KX(?:28|31))|OVOL1|ARI5B|P(?:RRX2|O[23]F1|AX6|BX2|EBB|IT1)|NF2L1|S(?:(?:MCA|OX)5|NAI1)|R(?:(?:XR|EL)B|ORA)|AIRE|DLX3|ELF2|IRF[79]|CUX1|TFEB|KLF8))|LHX3)_MOUSE\.H11MO\.0\.C|(?:ASCL2|BARX1|D(?:MRT1|LX5)|FOXD3|DDIT3|N(?:FI(?:L3|B)|GN2)|OVOL2|PITX1|T(?:BX20|EAD2)|E(?:TV6|VX1)|GLI1|MYBA|CUX2|VSX2|ZIC2|LHX6)_(?:HUMAN\.H11MO\.0\.D|MOUSE\.H11MO\.0\.C)|PROP1_(?:HUMAN\.H11MO\.0\.D|MOUSE\.H11MO\.0\.C)|(?:(?:(?:(?:BCL6|CTCF)|FOS)|JUN)_|KLF1_|MY[BC]_)(?:HUMAN|MOUSE)\.H11MO\.0\.A|USF[12]_(?:HUMAN|MOUSE)\.H11MO\.0\.A|XBP1_(?:HUMAN\.H11MO\.0\.D|MOUSE\.H11MO\.0\.C))$

Time output:
------------

  * Command: grex -c --file /dev/fd/63
  * Elapsed wall time: 0:00.93 = 0.93 seconds
  * Elapsed CPU time:
     - User: 0.88
     - Sys: 0.04
  * CPU usage: 99%
  * Context switching:
     - Voluntarily (e.g.: waiting for I/O operation): 1
     - Involuntarily (time slice expired): 35
  * Maximum resident set size (RSS: memory) (kiB): 127308
  * Number of times the process was swapped out of main memory: 0
  * Filesystem:
     - # of inputs: 0
     - # of outputs: 16
  * Exit status: 0


homer
^homer__(?:(?:A(?:CTYKNATTCGTGNTACTTC_Mouse_Recombination_Hotspo|AYTAGGTCA_RORg|GGTGTGAAM_Tbe)|CTYTCTYTCTCTCTC_GAGA\-repea)t|T(?:GCAGTTCCAANAGTGGCCA_CTCF\-SatelliteElement|TGCCAAG_NF1\-halfsite|BGCACGCAA_Arnt_Ahr)|A(?:TTTGCATAACAATG_OCT4\-SOX2\-TCF\-NANO|CAGGAAGTG_ER|ACAGCTG_Myo)G|A(?:(?:CCGTGACTAATTNN_PAX3_FKHR|ACAGGAAAT_EWS_FLI1)|TTTCCTGTN_EWS_ERG)\-fusion|CACAGCAGGGGG_Unknown\-ESC\-element|A(?:(?:(?:NTTMRCASBNNNGTGYKAAN_Brachyury|AC(?:TACAATTCCCAGAATGC_GFY\-Staf|CGGAAGT_ETS)|GGTGHCAGACA_Tbox_Smad|T(?:GCATAATTCA_Pit1\+1bp|T(?:AACACCT_Eomes|GC(?:ATCAT_Chop|GCAAC_CEBP)|TTCCATT_NFAT))|CTACAATTCCC_GFY|GCCAATCGG_NFY)|GGTCAAGGTCA_RARg)|DGGYAGYAGCATCT_PRDM9)|(?:GG(?:AGCTGTCCATGGTGCTGA_REST\-NRS|TCCCTAGGGA_EB)|A(?:T(?:TTCCCAGVAKSCY_ZNF143_STA|AGTGCCACCTGGTGGCCA_CTC)|V(?:YTATCGATAD_DRE|CAGGAAGT_EH)|CATCCTGGT_SPDE)|N(?:AGTTTCABTHTGACTNW_bZIP_IR|TGGGTGTGGCC_EKL)|CGGAAGTGAAAC_PU\.1\-IR|TTCGCGCGAAAA_E2|GTGCGCATGCGC_NR|RTCATGTGAC_MIT|DATGASTCAT_BAT)F|C(?:GG(?:CTGCNGNNNNCAGATAA_GATA_SCL|TTGCCATGGCAAC_RFX)|NNBRGCGCCCCCTGSTGGC_BORIS|TGGCAGGCTGCCA_Tlx_|C(?:ATATATGGNA_CArG|WGGAATGY_TEAD[24])|AAACCACAG_RUNX)|(?:AG(?:TAAACAAAAAAGAACANA_FOXA1_A|GTCANTGACCTN_FX)|NGAGGTCANNGAGTTCANNN_VD|TAGGGCAAAGGTCA_RX)R|(?:N(?:A(?:AACCGGTTCAAACCGGTT_Tcfcp2l|TTTCCNGGAAAT_STAT)|N(?:TGTTTATTTTGGCA_NF1_FOXA|VVCAGCTGBN_Ascl|ATGASTCATH_Fra)|RYTTCCGGH_Fli)|(?:GA(?:ATGGAAAAAATGAGTCAT_NFAT_|TGACTCATCN_Jun\-)A|N(?:ATGTTGCAA_CEBP_A|YYTGTTTACHN_FOX))P|A(?:(?:A(?:AGTAAACA_FOXA1_GSE2683|CCGGAAGT_ETV)|C(?:TTTCACTTTC_PRDM|AGGAAGTG_ETS)|GGCCTAG_ZNF71|TGMATATDC_Pit)|AACCACAAA_RUNX)|C(?:NCTTCCNGGAAGN_Stat3\+il2|T(?:TGGCACNGTGCCAA_N|GCGCATGCGC_NR)F|AAGATGGCGGC_YY|WGGCGGGAA_E2F|TGTTTAC_Foxo)|G(?:GTTAAACATTAAC_Hn|ATGACGTCA_At)f|G(?:GTTGCCATGGCAA_Rf|KVTCADRTTWC_Si)x|G(?:CCATCTGTT_NeuroD|SCTGTCACTCA_PBX|GCCCCGCCCCC_Sp|NCACGTG_BMAL)|R(?:ACAGCTGTTBH_HLH\-|SCACTYRAG_Nkx2\.)|(?:A(?:AGCACTTAA_Nkx3|GAGGAAGTG_PU)|GKTAATGR_Nkx6)\.|(?:G(?:TCCCCAGGGGA_EB|GTCACGTGA_US)|GAAAGTGAAAGT_IR|AACCGGAAGT_EL)F|DDAAAAATTTTY_SFP|A(?:CTGATAAGA_PQM|TGACTCATC_AP)\-|CAGATAAGGN_Gata|H(?:TTTCCCASG_Rbpj|ACTTCCGGY_Elk)|T(?:CA(?:CGTGAYH_Cbf|TCAATCA_Pdx)|GCGTGGGYG_Egr)|CTAATKGV_Isl)1|GGGRAARRGRMCAGMTG_RBPJ_Ebox|N(?:N(?:N(?:VCTGWGYAAACASN_Fox_Ebox|NNBAGATAWYATCTVHN_GATA)|CACCTGCN_E2A)|AGATWNBNATCTNN_GATA|NNCTTTCCAGGAAA_Bcl6|CTGGAATGC_TEAD|HAACBGYYV_BMYB|TATYGATCH_HNF6)|(?:A(?:GAT(?:STNDNNDSAGATAASN|(?:GKDGAGATAAG|AASR))_GATA|ACATGCCCAGACATGCCCN_p5|CATGCCCGGGCAT_p5)|N(?:NNGCATGTCCNGACATGCC_p6|CYAATAAAA_HOXD1)|GGNTCTCGCGAGAAC_ZBTB3|C(?:C(?:TGTCAATCAN_Pb|WTTGTY_So)x|GTGGGTGGTCC_GLI|TTCCGGGAA_Stat)|CNGTCCTCCC_Znf26|ADBTAATTAR_Lhx|TWGTCTGV_Smad)3|(?:A(?:AACYKGTTWDACMRGTTTB_GRHL|C(?:AGCTGCTG_Tcf1|WTCAAAGG_TCFL)|TATGCAAAT_Oct)|G(?:GGGGAATCCCC_NFkB\-p50_p5|A(?:TGACTCAGCA_NF\-E|AASYGAAASY_IRF)|YCATCMATCAT_HOXA)|(?:GT(?:TGCCATGGCAACM_Rf|CATAAAAN_Cd)|CCCATTGTTC_So|TAATTAGN_Lh)x|C(?:GGTCACGCCAC_Srebp|CCACGTGCT_Pho|TGTCTGG_Smad)|N(?:ATGASTCABNN_Fosl|WAACCACADNN_RUNX|GCGTGGGCGGR_Egr|YTAATCCYB_Otx)|(?:CTTGTTTACATA_Fox|NCCTTATCTC_Gat)a|(?:NRRTGACGTCAT_At|GTCACGTGGT_Us)f|HTGCTGAGTCAT_Nrf|RCCATMTGTT_Olig|TGCTGAGTCA_Bach|TTCAAGGTCA_Nr5a|BTCAAGGTCA_Nr5a)2|(?:CCATTGTATGCAAAT_Oct4_Sox1|N(?:TAATTDGCYAATTANNWWD_Pax|GRTGACGTCAY_Atf)|TGACCTTTNCNT_Nur7|TAATC(?:HGATTAC|AATTA)_Pax)7|(?:A(?:(?:AAGTAAACA_FOXA1_GSE2782|GGTCTCTAACC_PRDM1|TTTGCATAA_Oct)|CTGAAACCA_IRF)|G(?:AGGTCAAAGGTCA_TR|GCGGGAAAH_E2F)|TGATTRATGGCY_Hoxb|N(?:TTTCCAGGAAA_STAT|BWGATAAGR_Gata|RYTTCCGGY_Elk|AHCAGCTGD_Ap)|(?:ACATCAAAGGGA_Tc|GCCACACCCA_Kl)f|MTGATGCAAT_Atf|YCTTTGTTCC_Sox)4|(?:NNTTCTGGAANNTTCTAGAA_H|ATGACGTCATCC_c\-Jun\-C|GGGTTACTANAGGTCA_LX|AGAACAGNCTGTTCTT_A|TGACCTTTGCCCCA_PPA|A(?:AGGTCACNGTGACC_E|GTTTCAGTTTC_IS)|TTCTAGAABNTTCTA_H|CGGTGACGTCAC_C)RE|G(?:G(?:AAATTCCC_NFkB\-p65\-Rel|C(?:CAT(?:AAATCA_H(?:OXA|oxc)9|TAAC_Nanog)|AATTAAA_Unknown)|YCATAAAW_caudal|GGGGGG_Maz)|TCATGCHTGRCTGS_Pax8|CTGASTCAGCA_MafK|HCACGTG_CLOCK)|GT(?:AGGTCACTGGGTCA_Reve|GACCTTGA_Esr)rb|AACAGGAAGT_Ets1\-distal|CCAGGAACAG_AR\-halfsite|(?:(?:(?:A(?:GGAAACAGCTG_ETS|ACAGCTGTTHN)|GCCACGTG)_E|GGTTGCCATGGCAA_X)\-|C(?:TATAAAAGCSV_TATA|CGGTCACGTGA_E)\-)box|(?:ATGCCCTGAGGC_AP\-2alph|CA(?:GAGGNCAAAGTCCA_HNF4|AAGGTCAG_Err)|GGTCANYTGAGGWCA_THR|YTAATYNRATTA_Phox2|A(?:TCACCCCAT_Srebp|CAGCTGTTN_Ptf)1|(?:GCACGTACCC_HIF|CCAAAAATAG_Mef)2|TACGTGCV_HIF\-1)a|SCCT(?:SAGGSCAW_AP\-2gamma|AGCAACAG_Rfx5)|(?:ACAGGATGTGGT_ETS_RUN|GCTAATCC_CR)X|CCTTTTATAGCC_TATA\-Box|(?:AWWNTGCTGAGTCAT_Bac|NNTGTGGATTSS_Fox)h1|(?:A(?:GGGGATTTCCC_NFkB\-p6|TTTCTNAGAAA_STAT|ASCACTCAA_Nkx2\.)|G(?:CAGCCAAGCGTGACC|TCACGCTCNCTGA)_PAX|BAACAGCTGT_Myf|ACVAGGAAGT_ELF|DGGGYGKGGC_KLF)5|HWWGTCAGCAWWTTT_MafF|NAGAACAGNCTGTTCT_GRE|GCTGTGGTTT_RUNX\-AML|V(?:AGRACAK(?:WCTGTYC_GRE|NCTGTBC_PR)|NAVCAGCTGGC_Atoh1|DTTTCCCGCCA_E2F7|BSYGTCTGG_Smad4|GCTGWCAVB_Meis1)|(?:ANTTCTTAAGAA_STAT|TTCCKNAGAA_STAT|CCATTGTTNY_Sox)6|D(?:CYAAAAATAGM_Mef2c|ATGASTCATHN_Atf3)|(?:GGTGYTGACAGS_Tbx2|CCWTTGTYYB_Sox1)0|KC(?:ACGTGMCN_bHLHE40|CACGTGAC_NPAS2)|A(?:GCAGCTGCTGC_Myo|TGACGTCATCN_Jun)D|AAAGRGGAAGTG_SpiB|AAATCACTGC_Gfi1b|A(?:TTCTCGCGAGA_G|GGCCTGG_Z)FX|(?:AACCGGAAGT_GABP|TGCTGACTCA_Maf)A|ACCACGTGGTCN_Max|(?:GNCCACGTGG_[cn]|NCCACGTG_c)\-Myc|R(?:TACGTGC_HIF\-1b|GGATTAR_GSC)|(?:TGGCAGTTGG_A|GGCVGTTR_)MYB|GGCGGGAARN_E2F6|ACATCAAAGG_Tcf3|AGGTGTCA_Tbx5|ANCAGCTG_SCL)$

Time output:
------------

  * Command: grex -c --file /dev/fd/63
  * Elapsed wall time: 0:04.16 = 4.16 seconds
  * Elapsed CPU time:
     - User: 3.76
     - Sys: 0.38
  * CPU usage: 99%
  * Context switching:
     - Voluntarily (e.g.: waiting for I/O operation): 1
     - Involuntarily (time slice expired): 339
  * Maximum resident set size (RSS: memory) (kiB): 1257744
  * Number of times the process was swapped out of main memory: 0
  * Filesystem:
     - # of inputs: 0
     - # of outputs: 16
  * Exit status: 0


idmmpmm
^idmmpmm__(?:Eip74EF|abd\-A|Antp|e(?:ms|ve|n)|o(?:vo|c)|Ubx|f(?:kh|tz)|hkb|nub|s(?:hn|na)|kni|t(?:ll|wi)|(?:Df|M[ae]|bc|ca|pr)d|vnd|(?:sr|us)p|hb|Kr|gt|dl|[Dh])$

Time output:
------------

  * Command: grex -c --file /dev/fd/63
  * Elapsed wall time: 0:00.00 = 0.00 seconds
  * Elapsed CPU time:
     - User: 0.00
     - Sys: 0.00
  * CPU usage: 75%
  * Context switching:
     - Voluntarily (e.g.: waiting for I/O operation): 1
     - Involuntarily (time slice expired): 0
  * Maximum resident set size (RSS: memory) (kiB): 3536
  * Number of times the process was swapped out of main memory: 0
  * Filesystem:
     - # of inputs: 0
     - # of outputs: 0
  * Exit status: 0


jaspar
^jaspar__MA(?:0(?:080\.4|0(?:0[37]|24|35|5[28]|79|83|98)\.3|1(?:05\.4|(?:0[246]|1[2-4]|37|4[1358])\.3|54\.3)|(?:0(?:0[1259]|1[478]|2[78]|3[23679]|4[236-8]|50|6[0258]|7[56]|88|9[03-59])|1(?:0[038]|17|2[24]|3[1268]|4[0467]|5[0367]|62|97)|2(?:16|37|47|58)|4(?:52|6[1469]|7[2-5]|86|98)|5(?:1[0-2]|2[245]|9[28]))\.2|600\.2)|0(?:0(?:0[46]|1[3569]|2[23569]|3[018]|4[019]|5[1679]|6[3679]|7[0-478]|8[124-7]|9[1267])|1(?:0[179]|1[15689]|2[56]|3[059]|4[29]|5[12589]|6[013-9]|9[0-689])|2(?:0[1-4689]|1[0-2457-9]|2[0-24-9]|3[0-24-689]|4[0-35689]|5[0-4679]|6[47]|7[18]|8[14-689]|9[5-8])|3(?:0[03679]|1[034679]|3[17-9]|4[1256]|5[37]|6[459]|8[36])|4(?:0[2689]|18|[23]3|4[0235-9]|5[0146-9]|6[23578]|7[016-9]|8[0-589]|9[0-79])|37[12689]|5(?:1[3-9]|2[0136-9]|3[0-24-6]|4[1568]|5[014-68]|6[12689]|70|8[0458]|9[13-79])|6(?:0[1-9]|1[02-8]|2[0-8])|(?:1[78]|50|6[3-9]|[78][0-9])[0-9]|9(?:[01][0-9]|2[0-47-9]|3[13]|5[6-9]|6[03-8]|76|8[08]|9[278]))\.1|10(?:(?:0[125]|1[12]|21|47|5[1-3]|6[189]|7[04])|99)\.1)$

Time output:
------------

  * Command: grex -c --file /dev/fd/63
  * Elapsed wall time: 0:00.02 = 0.02 seconds
  * Elapsed CPU time:
     - User: 0.02
     - Sys: 0.00
  * CPU usage: 96%
  * Context switching:
     - Voluntarily (e.g.: waiting for I/O operation): 1
     - Involuntarily (time slice expired): 1
  * Maximum resident set size (RSS: memory) (kiB): 6296
  * Number of times the process was swapped out of main memory: 0
  * Filesystem:
     - # of inputs: 0
     - # of outputs: 0
  * Exit status: 0


neph
^neph__UW\.Motif\.0(?:0(?:0[1-57-9]|[34][49]|6[28]|[18][38]|95)|104|3(?:28|60|73)|139|4(?:11|69)|(?:[03]5|57)6|077|6(?:16|57))$

Time output:
------------

  * Command: grex -c --file /dev/fd/63
  * Elapsed wall time: 0:00.00 = 0.00 seconds
  * Elapsed CPU time:
     - User: 0.00
     - Sys: 0.00
  * CPU usage: 100%
  * Context switching:
     - Voluntarily (e.g.: waiting for I/O operation): 1
     - Involuntarily (time slice expired): 1
  * Maximum resident set size (RSS: memory) (kiB): 3028
  * Number of times the process was swapped out of main memory: 0
  * Filesystem:
     - # of inputs: 0
     - # of outputs: 0
  * Exit status: 0


predrem
^predrem__nrMotif(?:1(?:30?2|13[68]|41[27]|933|06|5[67]|75)|(?:14|9)95|187[15]|1056|2(?:0(?:[09][06]|8)|3(?:25|3)|(?:02|6)9|1(?:7[15]|89)|416|20|51)|(?:120|2(?:30|5[89]|9))0|(?:1(?:14|4[56])|249)1|(?:135|2(?:21|52|16))7|1(?:[17]1|29)4|(?:1(?:01|77)|2(?:34|11|46|8))8|503|340|7(?:71|[18]7)|8(?:04|18)|51|95|4)$

Time output:
------------

  * Command: grex -c --file /dev/fd/63
  * Elapsed wall time: 0:00.00 = 0.00 seconds
  * Elapsed CPU time:
     - User: 0.00
     - Sys: 0.00
  * CPU usage: 100%
  * Context switching:
     - Voluntarily (e.g.: waiting for I/O operation): 1
     - Involuntarily (time slice expired): 0
  * Maximum resident set size (RSS: memory) (kiB): 3920
  * Number of times the process was swapped out of main memory: 0
  * Filesystem:
     - # of inputs: 0
     - # of outputs: 0
  * Exit status: 0


scertf
^scertf__(?:harbison\.(?:DAL80|GLN3|HAP4|MSN[24]|MOT2|THO2|(?:NDD|SUT)1|ZAP1)|badis\.YER130C|morozov\.(?:MET28|CUP9)|pachkov\.(?:SPT1|HAP)5|(?:macisaac\.RTG|spivak\.HAP|badis\.GZF)3|(?:macisaac\.(?:ACE|HAP)|badis\.(?:ABF|FKH))2|(?:m(?:acisaac\.RFX|orozov\.MCM)|(?:macisaac\.(?:CB|SN)|badis\.FZ)F|(?:macisaac\.J|spivak\.P)HD|pachkov\.(?:HSF|ORC)|spivak\.(?:BAS|CRZ|RPH)|(?:spivak\.RL|badis\.HC)M|spivak\.TEC|badis\.REI|badis\.GIS|badis\.YOX|foat\.[DM]IG|foat\.OPI|foat\.FKH|zhu\.FHL|zhu\.GAT)1|morozov\.ARG80|(?:morozov\.PHO|spivak\.GCN)4|(?:morozov\.SM|zhu\.SF)P1|spivak\.(?:TYE7|YAP6)|(?:spivak\.CIN|badis\.SWI)5|badis\.CST6|badis\.TOS8|zhu\.(?:NHP6[AB]|MIG[23])|zhu\.PHO2)$

Time output:
------------

  * Command: grex -c --file /dev/fd/63
  * Elapsed wall time: 0:00.04 = 0.04 seconds
  * Elapsed CPU time:
     - User: 0.04
     - Sys: 0.00
  * CPU usage: 100%
  * Context switching:
     - Voluntarily (e.g.: waiting for I/O operation): 1
     - Involuntarily (time slice expired): 2
  * Maximum resident set size (RSS: memory) (kiB): 7600
  * Number of times the process was swapped out of main memory: 0
  * Filesystem:
     - # of inputs: 0
     - # of outputs: 0
  * Exit status: 0


stark
^stark__(?:TGGAGGDGGWAHTMATBVRTGWDDDRKKMW|(?:R(?:RAYATTYBKSGVATKVC|AAMGGRTT|TAA(?:A[CT]|M))|AA(?:TTAANNNNNCATN|CTG)|(?:A(?:A(?:NTNTAATGA|HKMTHB)|WNTGGGT)|TGANT|G(?:CAA|GGT))C|TWTKACKTAAN|(?:GNCTANWWA|CAAT)T|S(?:MATAAA|GG)AA|(?:TT(?:CCSGG|AYGT)|A(?:AAT|TCA)T|CAAC|MAAC)A|CACTTR)A|K(?:NVNVBYTAATKRSBHNVD|HGATAASR)|(?:ANHDDBHGATAASSDNN|R(?:BYGTGRGAAMC|TATATRTR|RCAGGTG))B|(?:TNRCGCNYNATTAAT|(?:GGGGAWTCC|CWYBD)C|KYTAATKDN|RA(?:CASCTG|TTAM)|ATGCGGG|YGYGGT)Y|R(?:WWWASWBDYSKNM|(?:CGCMATT|ATTAA))W|(?:TG(?:CATAATTAATTA|GCGC)|G(?:GGGAWYCM|TCANTNAA))C|B(?:YRHBACAAWGTDDB|CATAAATYA)|MGAADMGAADMGAAD|V(?:RGKTYAWTGAMMYY|SNKTDATKRCNV|ATTWGCAT)|(?:SVTAATYGATTAN|MVHTAAKCC|GRGGTCAY|T(?:YAAGTG|TAT))S|(?:RRNNNMCACCT|GAGGAA)GC|Y(?:SAAGGWCRCHRM|TAATGAVS|GATA(?:AG)?C)|(?:MATTAAWNATGC|YTAWWWWTA|CMGGAA|CASGTA|TAATT)R|STATAWAWRSVVV|WHWWWWWWWWKK|TGGCACGTGYYA|(?:R(?:WWNTNRCACY|AGTGAAAG)|(?:CCTTTGATC|TTAA|GCCA)T|TCAWTTAAM|WCYGGTT|CACATG)T|GGGGAMWWCCM|H(?:AATTAYGCR|SWAACHG)H|MRYTTCCGYY|STATAWAWR|T(?:GACGTCAT|AAATAG)|CTCRTAAAW|(?:A(?:WCAGGTG|CATGT)|GCAGSTG)K|BYAATTARH|TGACGTCA|GTACGTG|(?:TTTA|CAG[GS])TG)$

Time output:
------------

  * Command: grex -c --file /dev/fd/63
  * Elapsed wall time: 0:00.06 = 0.06 seconds
  * Elapsed CPU time:
     - User: 0.06
     - Sys: 0.00
  * CPU usage: 100%
  * Context switching:
     - Voluntarily (e.g.: waiting for I/O operation): 1
     - Involuntarily (time slice expired): 1
  * Maximum resident set size (RSS: memory) (kiB): 40160
  * Number of times the process was swapped out of main memory: 0
  * Filesystem:
     - # of inputs: 0
     - # of outputs: 0
  * Exit status: 0


swissregulon
^swissregulon__(?:(?:hs__(?:(?:(?:(?:(?:(?:ARNT_ARNT2_BHLHB2_MAX_MYC_US|TGI|EB|M[TZ]|GZ)F|H(?:OXA9_MEIS|IC|MX|ES)|E(?:WSR1\-FL|V)I|P(?:OU[16]F|ATZ|[BD]X)|TFDP|FOX[LNQ]|TEAD|MYOD|NR(?:3C|6A|F)|[CR]REB|SPZ|ALX|YY)1|(?:FOS_FOS_B_L1__JUN_B_D|TAL1_TCF_3_4_12|HOX_A(?:6_A7_B6_B7|4_D4|5_B5)|FOX_(?:F1_F2_J1|(?:(?:C1_C|D1_D)|I1_J)2)|MEF2_A_B_C_D|N(?:ANOG_mouse|FY_A_B_C)|S(?:OX_8_9_10|TAT5_A_B)|TFAP2_A_C)_|DMAP1_NCOR_1_2__SMARC|HBP1_HMGB_SSRP1_UBTF|R(?:FX1\.\.5_RFXANK_RFXAP|XR(?:A_VDR_dimer|_A_B_G)_|BPJ|ORA)|(?:TLX1\.\.3_NFIC|POU5F1_SOX2)_dimer_|(?:LEF1_TCF7_TCF7L|H(?:NF4A_NR2|S)F|SREBF|GTF2A|N(?:KX6\-|R5A|HLH)|HAND|HMGA|(?:PRR|MS)X|E(?:TS|N)|VSX)1_2|A(?:DNP_IRX_SIX_ZHX|IRE|TF[246])|(?:NFKB1_REL_REL|ESRR|H[IN]F1)A|(?:AHR_ARNT_ARNT|TFCP|FOSL|MYBL|BACH|KLF1|NR4A|CUX|LMO)2|N(?:KX2\-3_NKX2\-5|FIX)|(?:CEBPA_B_DDIT|ATF5_CREB|FOX[DP]|NFIL|TP5)3|T(?:CF4_dimer|FAP(?:2B|4)|LX2|BP)|S(?:MAD1\.\.7_9|P(?:I[1B]|1)|OX[25]|RY)|STAT2_4_6|(?:(?:FOXO1_3|(?:CDX|ELF)1_2|LHX3)_|POU3F1\.\.|N(?:KX2\-1_|R1H))4|(?:POU2F|SNAI|PITX|RUNX|EGR|GLI)1\.\.3|NFATC1\.\.3|ONECUT1_2|NKX2\-2_8|GATA1\.\.3|(?:E2F1\.\.|TBX4_)5|Z(?:IC1\.\.3|BTB1?6|FP161|NF(?:14[38]|238|384)|NF423|EB1)|(?:ARID5|TFE)B|P(?:AX(?:3_7|[24-68])|PARG)|N(?:FE2L|KX3\-)[12]|C(?:DC5L|RX)|E(?:OMES|P300)|G(?:FI1B|ATA6|TF2I)|SOX17|IKZF[12]|MA(?:FB|Z)|(?:CTC|EH|HL)F|BPTF|FEV|JUN|DBP)\.|(?:POU5F1\.|N(?:ANOG|FE2)\.|(?:GFI1|(?:MYB|(?:AR|T)))\.))|MYFfamily\.)|bHLH_family\.)p|mm__(?:(?:(?:(?:(?:(?:ARNT_ARNT2_BHLHB2_MAX_MYC_US|TGI|EB|M[TZ]|GZ)F|H(?:OXA9_MEIS|IC|MX|ES)|E(?:WSR1\-FL|V)I|P(?:OU[16]F|ATZ|[BD]X)|TFDP|FOX[LNQ]|TEAD|MYOD|NR(?:3C|6A|F)|[CR]REB|SPZ|ALX|YY)1|(?:FOS_FOS_B_L1__JUN_B_D|TAL1_TCF_3_4_12|HOX_A(?:6_A7_B6_B7|4_D4|5_B5)|FOX_(?:F1_F2_J1|(?:(?:C1_C|D1_D)|I1_J)2)|MEF2_A_B_C_D|N(?:ANOG_mouse|FY_A_B_C)|S(?:OX_8_9_10|TAT5_A_B)|TFAP2_A_C)_|DMAP1_NCOR_1_2__SMARC|HBP1_HMGB_SSRP1_UBTF|R(?:FX1\.\.5_RFXANK_RFXAP|XR(?:A_VDR_dimer|_A_B_G)_|BPJ|ORA)|(?:TLX1\.\.3_NFIC|POU5F1_SOX2)_dimer_|(?:LEF1_TCF7_TCF7L|H(?:NF4A_NR2|S)F|SREBF|GTF2A|N(?:KX6\-|R5A|HLH)|HAND|HMGA|(?:PRR|MS)X|E(?:TS|N)|VSX)1_2|A(?:DNP_IRX_SIX_ZHX|IRE|TF[246])|(?:NFKB1_REL_REL|ESRR|H[IN]F1)A|(?:AHR_ARNT_ARNT|TFCP|FOSL|MYBL|BACH|KLF1|NR4A|CUX|LMO)2|N(?:KX2\-3_NKX2\-5|FIX)|(?:CEBPA_B_DDIT|ATF5_CREB|FOX[DP]|NFIL|TP5)3|T(?:CF4_dimer|FAP(?:2B|4)|LX2|BP)|S(?:MAD1\.\.7_9|P(?:I[1B]|1)|OX[25]|RY)|STAT2_4_6|(?:(?:FOXO1_3|(?:CDX|ELF)1_2|LHX3)_|POU3F1\.\.|N(?:KX2\-1_|R1H))4|(?:POU2F|SNAI|PITX|RUNX|EGR|GLI)1\.\.3|NFATC1\.\.3|ONECUT1_2|NKX2\-2_8|GATA1\.\.3|(?:E2F1\.\.|TBX4_)5|Z(?:IC1\.\.3|BTB1?6|FP161|NF(?:14[38]|238|384)|NF423|EB1)|(?:ARID5|TFE)B|P(?:AX(?:3_7|[24-68])|PARG)|N(?:FE2L|KX3\-)[12]|C(?:DC5L|RX)|E(?:OMES|P300)|G(?:FI1B|ATA6|TF2I)|SOX17|IKZF[12]|MA(?:FB|Z)|(?:CTC|EH|HL)F|BPTF|FEV|JUN|DBP)\.|(?:POU5F1\.|N(?:ANOG|FE2)\.|(?:GFI1|(?:MYB|(?:AR|T)))\.))|MYFfamily\.)|bHLH_family\.)p)2|(?:hs__(?:(?:E(?:LK1_4_GABP_A_B1_|SR1)|R(?:XRG_dimer|EST)|S(?:TAT1_3|RF)|FOXA2|PRDM1|KLF4|XBP1)|IRF1_2_7)\.p|mm__(?:(?:E(?:LK1_4_GABP_A_B1_|SR1)|R(?:XRG_dimer|EST)|S(?:TAT1_3|RF)|FOXA2|PRDM1|KLF4|XBP1)|IRF1_2_7)\.p)3|sacCer__(?:Y(?:ER130C|AP6|OX1)|S(?:PT1|WI)5|DAL80|NHP6[AB]|A(?:BF|CE)2|CUP9|FKH[12]|GCN4|HAP[2-5]|MIG[1-3]|MSN[24]|P(?:DR[13]|HO[24])|G(?:LN|ZF)3|RTG3|CIN5|T(?:OS8|YE7)|CST6|(?:CRZ|FHL|BAS|G(?:AT|IS)|(?:CB|FZ)F|HSF|[HM]CM|R(?:EI|LM|PH)|S(?:IG|[FM]P)|ORC|TEC)1|R[FO]X1))$

Time output:
------------

  * Command: grex -c --file /dev/fd/63
  * Elapsed wall time: 0:00.24 = 0.24 seconds
  * Elapsed CPU time:
     - User: 0.22
     - Sys: 0.01
  * CPU usage: 99%
  * Context switching:
     - Voluntarily (e.g.: waiting for I/O operation): 1
     - Involuntarily (time slice expired): 7
  * Maximum resident set size (RSS: memory) (kiB): 62404
  * Number of times the process was swapped out of main memory: 0
  * Filesystem:
     - # of inputs: 0
     - # of outputs: 8
  * Exit status: 0


taipale
memory allocation of 66336431728 bytes failedCommand terminated by signal 6

Time output:
------------

  * Command: grex -c --file /dev/fd/63
  * Elapsed wall time: 1:40.82 = 100.82 seconds
  * Elapsed CPU time:
     - User: 100.68
     - Sys: 0.02
  * CPU usage: 99%
  * Context switching:
     - Voluntarily (e.g.: waiting for I/O operation): 10
     - Involuntarily (time slice expired): 278
  * Maximum resident set size (RSS: memory) (kiB): 45748
  * Number of times the process was swapped out of main memory: 0
  * Filesystem:
     - # of inputs: 0
     - # of outputs: 8
  * Exit status: 0


taipale_cyt_meth
^taipale_cyt_meth__(?:(?:(?:(?:(?:(?:(?:(?:FOXP1_NTGTTTRNNNNNNNNNNNNNNNNWCAA|RXRB_NRGGTCAAAGGT|TCFL5_NCACGYG)CA|(?:T(?:BX19_NANGTGTKA|_NANGTGTGAN)NNNTNACACC|GRHL1_NAACCGGT|OSR2_NGCTACYG)T|FOXA2_NWNWGTMAATATTKRYNYW|(?:PAX4_NATTTCACGCWTSANYGNN|(?:CEBPE_NRTTGCGYA|ATF6B_TGCCACGTC)A|HAND2_AACACCTG)Y|PAX1_NSGTCACGCWTSANYG|HNF4A_NRG(?:GTCAAAGTCCR|TCCAAAG(?:GT|TC)CR)|(?:P(?:AX(?:7_NSGTCACGSNWR|4_NYACGCTAA)T|OU3F4_NTATGCGCA)T|N(?:FATC4_N(?:TTTCCRYGG|AYGGA)AA|KX6\-3_NTMATTA)|T_NTCACACNTANGTGTG|(?:E2F7_NTTTCCCGCC|HOXC13_NCTCGTA)AA|(?:LBX2_CTMAT|VSX1_Y)TAATT|FOXK1_NWYGTAAAY|RFX7_NGTTGCY|HMX1_NCAMTTA)A|(?:N(?:R3C2_NGNACRNNNYGTN|FKB2_NGGGGAWNYMC)|(?:RFX3_NGTTGCCWAGCA|NFAT5_NYGGAAANNT)A|FOXO3_NTCCCCACA|GSC2_YTAATC)C|CUX2_NTGATCGATYR|NFE2_NATGASTCAT|BARHL1_NTAATTG)N_eDBD_meth|(?:(?:KLF10_RMCACRCCCMYNMCACRCCCMC|FOXD2_NYWANGTAAACAN)_eDBD|SOX3_NGAACAATGN_FL)_meth|(?:(?:(?:(?:(?:(?:(?:(?:ELF3_ACCAGGAAGNNNNNNNNNWWWWW|PRDM4_YRRCRGTTTCRAGKSYNCCC|POU3F2_TAATKANNNNNTAATKA|HES5_NCACACKY)|(?:ETV4_NCAGGAAGGAAGT|MSX1_NTCGTTA)N)|(?:(?:TLX3_NAATTGNNNNNNNNNNNCAAT|(?:IRX1_NACGYGNNNNNNCR|CREB1_NRTGAYG)CG|PAX4_NAATTANNTAAT|PROX1_NAAGRYGTCT|E(?:LF2_NACCM|TV2_NRCA)GGAAG)T|(?:RUNX2_NWAACCACANNNACCACA|(?:POU2F2_NTCATTATG|FOXG1_NAYRTAAA)C|P(?:AX7_NTAATTGAT|OU4F3_NTATGCA)T|NR2C1_NRAGGTC|(?:HOXA6_R|(?:LHX4|EN1)_N)TCGTT)A|GMEB2_NKACGTNNNNTACGTM|FOXN2_NGCATNNNNNNNATGC|POU3F4_NTAATTWATGCG|FOXD2_NWACAATAAYAWW|(?:IRF7_NNGAAANYGAAAN|CLOCK_NMCAYGYG)Y|DMRTC2_WWTYGNTACAT|ONECUT1_NTATTGATY|USF2_MNCAYGTGAY|GATA2_NWGATAAS)N)|(?:IRX5_NCGCGWNNNWCGC|NANOG_TTAAKT)GN)_eDBD|(?:SPDEF_NAMCAGGAT|ELK3_NACCGGAA)GTN_FL)|(?:P(?:OU6F1_TYATTANNNNTYATTA|BX1_KTGATTGAYK)|CREB3L1_TGCCACRYGTACR|ONECUT2_NTATTGATCCGT|KLF12_NGCCGACGCCCW|NR1I3_NYGAACTWW)_FL)|(?:TLX3_NAATTGNNNNNNNNNCAATT|(?:ETS2_NACAGGANNNNNNTCCT|GCM2_RTGNKG)GT|NHLH2_NKGNMKCAGCTGCGYCM|POU5F1_NYTAATTATGCGNR|GMEB1_NKACGTNNNNACGTM|NKX2\-8_NATGTCGTTAYTG|(?:BARX2_NWAAAYCATT|NKX2\-8_NTCGTTS)A|M(?:LX_NNCAYGTGM|AX_RNCATGTG)Y)N_FL)|KLF3_NRCCGCAGCCCN_FL)_meth|(?:(?:TFCP2_AWCCGGWTNNAWCCGGWT|PAX6_NYACGCNTSANYGNNYN)|ESRRG_NYCAAGGTCAN)_eDBD_meth|(?:TCF7L1_(?:WCATCGRGRCGCTGW|ASATCAAAS)|KLF17_NMCCACGCWCCCMYY|(?:TGIF2LY_TGACANNTG|(?:BBX_TGAWCNNNGW|DUXA_TRAYNTAA))TCA|BHLHE40_GTCACGTGAC|S(?:OX7_ACAATNNNATTGT|MAD5_YGTCTAGACA)|PTF1A_NYGTCAGCTGNY)_eDBD_meth|(?:(?:FOX(?:P3_NAWTTGTAYGACAAAT|R2_NYRTAWACATAAATNN)|(?:IRF4_NYGAAASYGAAAS|OVOL1_NRWACCGTTATN|HLF_NRTTRYGYAA)Y|(?:EGR2_NMCGCCCACGC|XPA_NCACCTCAC|HOXC8_NTAATT)A|(?:OTX1_NTAATCCN|RARG_NRGGTCA)Y|TEAD1_NRCATWCC|TGIF2_NTGACAG)N|(?:(?:NR2F6_NRGGTCRNTGACCYN|(?:HOXA10_NGTCGTAAAAN|(?:OLIG3_ACCATATGKT|DLX1_NYAATTAN)))|(?:M(?:AF_NYGCTGACNNNGCR|EF2C_CCWWATWWRG)|LHX8_TRATTGCAATYA|KLF12_NRCCACGCCCW)))_FL_meth|(?:(?:TLX3_NAATTGNNNNNNNNNNCAATT|YY1_NGCCATNTTTGNCNNNNYGTGC|RUNX3_NWAACCGCANNNACCGCAR|POU6F1_NATTATNNNNNNNATAAT|ETV7_NYTTCCSGGAAR|ELF3_NTGTGCGGATGC|MSC_NNACAGCTGTN|ASCL2_ACACGACGC|CDX4_NGYMATAAAA)N|(?:(?:HSF1_NGAANNTTCNNGAA|ELK3_NTCGTAAATGC)N|(?:POU6F1_TATGCNNNGCATA|GATA3_NGATAAGATCW|VENTX_CGATTATCG|NR1I3_NTGAACTWW)))_FL)|(?:(?:KLF10_RMCACRCCCMYNMCACRCCCMC|FOXD2_NYWANGTAAACAN)_eDBD|SOX3_NGAACAATGN_FL))|(?:HSF5_YNGAANNNNNNNNNNNNNAACRTTCNR|POU3F2_TAATTNNNNNNNNAATTA|GLI3_RGACCACCCACRWYG|DMRTC2_RAACGATACA|SREBF1_NTCACGCCAY|E2F2_GCGCGCGCGYW|CREB1_NRTGACGTN)_eDBD)|(?:(?:(?:TLX3_NAATTGNNNNNNNNNNNNNC|PAX4_NAATTANNNNNNNNT)AAT|BCL6_NYGTAATCGAGGAA|JUND_NRTGACGCA)T|(?:IRF3_NCNGTTTCSNSGAAACSGA|GATA2_NYGAT)AAS|(?:HSFY1_NCRTTCGAAWCRTTCG|FOXE1_NSYTAAAYAAAC)AW|FOXN2_NNGCGTSNNNNNSACGCN|(?:TBX20_NAGGTGTGAAGGTGTG|POU4F1_NTGCATWATGC|CREB1_NTGACGCGTC|NR2C1_NRRGGTC)A|(?:IRX1_NACAYGNNNNNNCRT|ELF5_NANNMGGAA)GT|(?:(?:M(?:AX_NCACGTGNNNN|LX_)NCACG|POU2F2_NCATTANNNTAA)T|(?:GLIS2_RCCCCCCRCGW|IRX5_NCRTGTNNNACA)Y|FIGLA_NNCACCT|BARHL1_NTAAAC|NANOG_TTAATK)G|(?:HSF5_NRCGTTCTAGAAYG|(?:BCL6_NTGCTTTCGAGGA|CREB3L4_YGCCACGTC)A|ELF3_NAT(?:(?:AA|R)|KG)CGGATG|JUNB_NATGACGTCA|CUX1_NYATYGAT)Y|POU2F2_NTAATNTATGC|MYBL2_NTAACSGTTR|S(?:PIB_RWWGSGGAAGT|CRT1_NGCAACAGGT|IX6_NSRTATCRY))N_eDBD)|POU3F1_NTAATKAKATGCRN_eDBD)_repr|Z(?:(?:(?:(?:(?:(?:(?:(?:(?:(?:NF(?:177_NTNGRTCKNNNNNNNNAGTCAT|345_TYGCAACNNNNNCAACTGKAC|76_NYWWCCCAYAATGCANYGCR|250_NTAGGCCTA)|BTB(?:33_NRCGCNNWTTTAACATAAY|2_NTTTCCGGTAM))N|(?:B(?:TB(?:37_NYACCGCRNNYACCGYR|12_NGGCCTGCCGTCNN)|ED1_NTRTCGCGAYAN)|NF449_MAGCCCAACC))|IC4_NRCCMCCYGYNGTGN)_eDBD|NF501_NSSCSACGCGAACAM_FL)|NF(?:597_GGCGGCCATYTTG|396_NTGTMCRAAA)N_FL)_meth|NF(?:787_RATGCMNNNNNNNTGCCTCR_FL_meth|(?:684_NYACAGTCCWCCCCTTK|(?:524_NYTCGNACCCK|396_NTGTMCGAAA))N_FL)|(?:BTB22_NKCACTANNNTAGTG|NF343_NYGCTTCACCNCGGY)MN_eDBD_meth|(?:NF(?:660_NYTGATNNCCCAYCCTRN|(?:(?:(?:444_NCRTCCCCCTCCCCC|7(?:5A_NGCTTTTCCCACA|04_NRCCGGCCGGY)|32_NYGTAACNYGAYAC)N|787_TGCCTCMGTTTMCCY)|821_NRGACRGACRGACRN))_FL|BTB(?:14_NTGCRCGTGCACGYG|26_NMTCYAGAAAA)N_FL)_meth|(?:BTB(?:1(?:4_NYGCRCGTGCACGYG|8_NWTCCAGATGTK)|7A_NCGACCMCCG)|NF(?:2(?:74_NRTRTGAGTTCTCRY|96_NASTGGWCAS)|449_NTCGCGNGCMARCA)|NF(?:282_NTTCCCMYNACA|140_NRCAATTCCGCT)C|FP1_NTTTTATACCCAGC)N_eDBD_meth|NF771_NRCGCTAACCATTRN_eDBD_meth)|NF787_RATGCMNNNNNNNTGCCTCR_FL)|(?:NF(?:580_CCTACCCTNNCCTACCCY|281_GCCCCTCCCCCM|449_RCGCCCAACC)|BTB12_NGGCCTGCCGTCNT)_eDBD)|(?:NF(?:276_NTTAAGGNNGTANNNWCSNCCTTA|12_GGKSMTRYTTGTTWYAGCAN)|NF(?:23_NKGKCGCGGNCATGGKN|460_NAACGCCCCCC)G|BTB37_NTGCCGNNTTRGCCGW|IC4_NRCCMCCYGYNGYG)N_eDBD)_repr|(?:(?:NF(?:2(?:76_NTTAAGGNNGWANNNWCSNCCTTAA|81_NCCCCTCCCCC)|12_GGKSMTRCTCGTTATAGCRN)|(?:NF(?:23_NKKKCGCGGNCATGGKN|460_NRMCGCCCCCC)|IC1_NMCCMCCYGCYGW)G|FP42_NGRCRGCCATMTTG)N_eDBD|(?:(?:NF580_CCTACCCTNNCCTACCCT|IC(?:3_NGACCCCCT|5_NGACCCCCY)GCTGTGM)_eDBD|(?:(?:NF(?:684_NYACAGTCCRCCCCTTK|524_NYTCGNACCCR)N_FL|IC(?:1_NRCCM|3_NRCCC)CCYGCTGTGN_FL)|(?:(?:NF7(?:5A_NGCTTTTCCCACMN|40_NYGCCCCCCCCAC)_eDBD|BTB(?:45_NCACCTATAK|7B_NCGACCMCC)N_eDBD)|NF771_NRCGCTAACCATTRN_FL))))_meth|SCAN(?:(?:(?:23_NYCATGTGCTAATTACAMN_eDBD|31_GCATAACYGCCCYGCKKCN_FL)_meth|4_NYGCACACNCTGWAARN_eDBD)_repr|29_MMGYGTAGMCGKCTACACNN_eDBD_(?:meth|repr)|16_NANTGTTAACAGAGCCTCN_eDBD_(?:meth|repr)|9_NRGGATAAGATAAGAANCMN_eDBD_(?:meth|repr)|5A_NYGTCCCYCCCCAAANMN_eDBD_(?:meth|repr)|(?:1(?:6_NANTGTTAACAGAGCCTCN_FL|_NYRCACACMCTGMAAMN_eDBD)|4_NYGCACACMCTGMAAMN_eDBD)_meth|23_NYCATGTGCTAATTACAMN_eDBD|16_NANTGTTAACAGAGCCTCN_FL|31_GCATAACKGCCCTGCKKCN_FL|1_NYRCACACNCTGMAAMN_eDBD)|NF384_TTTTTNNNNNNNNNNNNAAAAA_eDBD_(?:meth|repr)|(?:(?:NF(?:580_(?:NRTTATGTTAAAWWNYTACCNYN|MCTACCCYNNNMCTACCCY)|784_STACYTACCKY)|NF740_NYGCCCCCCCCAC)|FP41_NGCTAACTCTCCRCR)_FL_(?:meth|repr)|(?:BTB(?:43_NGTGCCNNNNNNNYAGCAC|20_NYAAYGTATRK)|BTB(?:32_NRTACAGTNNNACTGTA|12_NGCTGNNCCGCG)Y|NF(?:713_N(?:AGAAAAAAGACWR|MGACGACTGCCAC)GAAA|174_NGNCRATCACTYGNC|4(?:54_(?:NRGCGCCN|TRGCGCC)GGCGCY|10_NYANCCCATAATA)|385D_NCGTCGCGACG|263_NGTGCTCCC))N_eDBD_(?:meth|repr)|(?:(?:NF(?:177_NTYGRTCKNNNNNNNNAGTCAT|345_TTGCAACNNNNNCAACYGKAC|250_NTAGGCCYA)|(?:NF76_NYYWCCCAYAATGCANYGC|IC1_NMCCMCCCGCYGY)G|FP42_NGRCHGCCATMTTG|BTB2_NTTTMCGGTWA)N|(?:IC(?:3_NGACCCCCC|5_NGACCCCCY)GCTGYGM|BED1_NTRTCGCGAYAT))_eDBD|(?:BTB22_NKCACTANNNTAGTG|NF343_NYGCTTCACCNCGGY)MN_eDBD|NF(?:660_NYTGATNNCCCAYCCTRN|(?:(?:(?:444_NCRTCCCCCTCCCCC|7(?:5A_NGCTTTTCCCACA|04_NRCCGGCCGGY)|32_NYGTAACNYGAYAC)N|787_TGCCTCMGTTTMCCY)|821_NRGACRGACRGACRN))_FL|(?:BTB(?:1(?:4_NYGCRCGTGCACGYG|8_NWTCCAGATGTK)|7A_NCGACCMCCG)|NF(?:2(?:74_NRTRTGAGTTCTCRY|96_NASTGGWCAS)|449_NTCGCGNGCMARCA)|NF(?:282_NTTCCCMYNACA|140_NRCAATTCCGCT)C|FP1_NTTTTATACCCAGC)N_eDBD|NF771_NRCGCTAACCATTRN_eDBD|NF7(?:5A_NGCTTTTCCCACMN|40_NYGCCCCCCCCAC)_eDBD|BTB(?:14_NTGCRCGTGCACGYG|26_NMTCYAGAAAA)N_FL|NF771_NRCGCTAACCATTRN_FL|(?:NF5(?:01_NSSCGACGCGAACM|97_NGCCGCCATYTTG)|IC(?:1_NMCCM|3_NRCCC)CCYGCTGYG)N_FL|BTB(?:45_NCACCTATAK|7B_NCGACCMCC)N_eDBD)|(?:(?:(?:(?:HSF5_YNGAANNNNNNNNNNNNNAACRTTCYR|IRF3_NCNGTTTCCNGGAAACYGAAAS|P(?:RDM4_YRRCRGTTTCRAGGGTTACC|OU3F(?:[24]|1)_NTATGCWAATKAG)|P(?:OU3F1_TAATTNNNNNNNAA|ROP1_TAAYNTCG)TTA|UBP1_AWCCGGNNNNNNCCGGWT|BCL6B_RYGTAATCTAGGAATW|(?:HSF5_AACRTTCTAGAAYGY|POU4F3_ATNAATWATGCA|OLIG(?:3_AMCAGCTGT|2_AMCATATGK))T|(?:L(?:EF1_WCATCGNNNCGCTG|MX1B_YTCGTTA)|GATA6_WGATAACGATC)W|GLI(?:2_RGACCACCCACG|3_RGACCACCCACR)WWG|ATF4_GGATGATGTCATCC|SREBF(?:1_RTCA(?:CMCC|GGTG)AY|2_ATCA(?:CMCC|GGTG)AY)|E2F2_NCGCGCGCGCM|CREB1_NRTGAYGTN|NANOG_TTAACGA|EN2_MTCGTTANY)_eDBD|(?:(?:(?:(?:(?:(?:(?:(?:(?:KLF11_NMCACGCCCNNNNCACGCCCMC|CREB3L4_YGCCACGTGGCA|T(?:CF7_(?:WCATCGRGRCGCTGW|ASATCAAAS)|GIF[12]_TGACANNTGTCA)|DMRT(?:A2_NNTTGW|3_NWWTTGN)TACATT|ARGFX_YTAATCTAATTAG|(?:PKNOX2|MEIS3)_TGACANNTGTCA|B(?:HLHE23_ANCATA|ARHL2_NTAAT)TGNY|(?:BHLHE22_ANCATATGN|OLIG2_AACAGCTGT|ATOH1_ANCAGCTGN|ATOH1_ANCATATGN|ATOH7_ANCATATGN)Y|MEIS2_TGACANNYGTCA|BHLHE41_GTCACGTGAC|MEF2[BD]_CCWWATWWRG|SNAI1_NRCAGGTGYR|H(?:ES5_GGCACGTGY|OXB6_YTAATTR)Y|HES1_GGCRCGTGNS|LHX9_CYAATTAR|ISX_CTAATTAN)_e|(?:(?:RORB_NAWNTRGGTCRTGACCYANW|TBX20_NAGGTGTGANNNTCACACC|PAX7_NNATTMGTCACGS|(?:ELF4_NATGCGGAA|OSR1_NGCTACY)G)T|FOXB1_NWNWGTMAATATTRACWYW|(?:GFI1_NMAATCACNGCNNNNCACT|EGR1_NMCGCCCACGC)M|(?:N(?:R(?:1D[12]_NAWNTRGGTCANTRGGTC|(?:5A2_NYCAA|2C2_NR)GGTC)|KX2\-3_NCCACTTR)|R(?:ORC_NWWN|ARA_)NRGGTCANNRGGTC|(?:(?:(?:(?:PPARD_NRRGGTC|RARG_NRGGTCA)|RXRA_NRGGTC)|THRB_NRGGTC)A|ESRRB_NYC)AAGGTC|HNF4A_NRGGTCAAAGGTC|(?:PAX3_N(?:SGTCACGSNN|TAATYG)|VSX2_YTA)ATT|(?:(?:POU4F1_NTNNATWAT|(?:ATF6_NGRTGACGTG|EGR4_NMCGCCCAC))G|FOX(?:I1_NWWNYG|(?:(?:C2_NWAN|Q1_NTAY)R|(?:J3|O4)_NYG))TAAA)C|POU3F2_NTATGCGCAT|TBX(?:(?:15|[36])|21)_NAGGTGTG|(?:NKX6\-2_NY|HOX(?:B[57]_NY|A2_NY|D4_NY)|PRRX2_NY|(?:HOXD1_N|EMX2_Y|PDX1_Y)T|LMX1A_YT|(?:(?:GBX2|EN1)|DLX6)_NY|M(?:SX2_NC|NX1_NY)|TLX2_NC|BSX_NY|RAX_YT)AATT|(?:PHOX2(?:A_C|B_N)|HOX(?:(?:A7|B[28])|D8)_N|ALX4_C|DRGX_Y|E(?:VX|N)2_N|EVX1_N|VAX1_N|NOTO_N|ARX_C)YAATT|(?:ISL2_SCAC|LBX2_CTCG|BSX_NTCG)TT)A|BACH2_NWANCATGASTCATSNTW|(?:NFATC(?:2_NTTTCCRNNNN|3_NTTTCCR)YGGA|(?:HSFY[12]_NTTCGAANNNTTC|TBX18_NRAGGTGT)G|(?:E2F(?:3_NTTTTGGCGCCA|8_NTTTCCCGCC)|HOX(?:(?:(?:(?:C12_GGT|A11_RGY)AA|B(?:13_NC|9_G)TCG)|(?:A11|C12)_NRTCG)TA|D(?:1(?:3_NCC|0_GY)AATA|13_NCTCGTA|12_NRTCGT|10_RTCGTA|9_RTCGTA)))A)AA|(?:PAX(?:2_NSGTC|4_NTY)ACGCWTSANYGNN|PPARD_NRRGGTCRTGACCY|T(?:HRB_NRRGGTCRTGACCY|CF21_NACCATATGK|CF21_NAACAGCTGY|EF_NRTTAYGTAA)|R(?:(?:AR[AG]_NRGGTCR|XRB_NRGGTCR)|ORC_NRGGTCR)TGACC|MSGN1_NRCCAWWTGK|MESP2_NAMCATATGK|ATF(?:6(?:B_NRTGAY|_NRTGAC)GTC|2_NRTGAYGTC)A|CEBP[BD]_NRTTGCGYAA|MYF6_(?:CGTCANNTGT|NAACANNTGW)|ASCL1_NRCAGCTG|HES(?:2_GGCR|7_GGCA)CGTG|SIX2_NCGTATCR)Y|TFCP2L1_NCCGGNNNNNNCCGG|(?:MAFG_NYGCTGA(?:YR|S)TCAGC|GATA4_NWGATAAS|ARGFX_NCTAATTA|NR4A2_NAAAGGTC)R|(?:RFX(?:3_NGTTGCCATGGC|[14]_NGTTRCCATGGY)AA|NR3C1_NGWACANNNYGTW|MAF[AG]_NWWWNTGCTGA|TFAP2B_NGCCNNNGG|SOHLH2_NGCACGTG)C|S(?:KOR[12]_NWNNKKTAATTAA|OX(?:1(?:2_ACCGAACAAT|4_NGAACAATG)|9_MGAACAATR|8_AGAACAATG|30_GAACAAT)|IX4_NCGTATCAT|HOX_CYAATTA)|SP(?:1_NWRG|[89]_N)CCACGCCCMY|KLF14_NRCCACGCCCMY|POU2F2_NTATGCWAAT|BHLHA15_NMCA(?:GC|TA)TGK|NFATC3_NAYGGAAAM|(?:NKX3\-[12]_NCCAC|HMX2_NCAM)TTAA|SP3_NRCCMCGCCCMY|(?:(?:HOXA6_NG|LBX2_NC)YAATT|RARA_NRRGGTC)AN|(?:KLF(?:(?:(?:(?:16_N|2_NR)CCACR|4_NRCCMCG)|5_NMCACG)|6_NRCCACG)C|DMBX1_NTAAT|PITX(?:[12]|3)_NTAAT)CC|TCF12_NCACSTG)N_e|(?:N(?:HLH1_NKGNMKCAGCTGCGYCM|R2F[16]_NRGGTCAAAGGTCA)|FLI1_NACCGGATATCCGGT|MAFF_NYGCTGASTCAGCR|ERG_NACCGGATATCCGGT|(?:HOX(?:(?:A13_NCTCG|C1[01]_NRTCG)TAAA|(?:A10_NGY|C1(?:0_N|1_R)GY)AATAAA|D9_GYAATAAA|A5_NYAATT)|(?:(?:(?:LMX1B_NWWYT|DLX[3-5]_NY|MSX1_NC)AA|ISL1_SCAC)|(?:ALX3_C|DLX2_N|E(?:MX1_N|SX1_Y))YAA)TT)A|EL(?:F2_NATG|K1_NAC)CGGAAGT|ESRRA_NYCAAGGTCA|GSC_YTAATCC)N_e|N(?:R2F1_NRGGTCRNTGACCYN|EUROG2_RNCATATGNY)_e|(?:CREB3L1_TGCCACGTGGCA|T(?:GIF2LX_TGACANNTGTCA|FAP4_A(?:NCATATGN|WCAGCTGW)T)|PKNOX1_TGACANNTGTCA|IRF5_NYGAAACCGAAACY|NEUROG1_RNCATATGNY|LEF1_ASATCAAAS)_e|(?:IRF8_NYGAAASYGAAAS|OVOL2_NWWCCGTTAYN|MYO(?:D1_(?:NAA|YGT)CANNTGT|G_(?:NAA|CGT)CANNTGT)|(?:CEBPG_NRTTGCGY|DBP_NRTTAYGT)AA|(?:CREB5|BATF3)_NRTGAYGTCA|JDP2_NRTGAYGTCA|MSC_NRNCATATGN|ASCL2_NRCAGCTG|HEY2_NGCACGTG)YN_e|(?:(?:HOXA10_NGTCGTAAAAN|(?:(?:ELK3_NACCGGAAGTN|OLIG3_ACCATATGKT)|DLX1_NYAATTAN))|PBX1_KTGATTGAYR)_e|(?:ATF3_NRTGAYGTCA|MSC_NRACAGCTGT)YN_e|S(?:NAI2_NRCAGGTGCR|IX1_NSRTATCRYN)_e|(?:MAF_NYGCTGA|OTX1_NTAATC)CN_e)|(?:KLF13_NRCCACGCCCMYN|GATA5_WGATAACGATCT|PROP1_TAATTNNATTA|(?:GATA5_NWGATAASR|LHX4_NTAATTA)N|HEY1_NGCACGTGYN)_e)DBD|(?:(?:FOXA(?:1_NWR|3_NWN)WGTMAATATTKRYNYW|(?:TBX20_N(?:AGGTGTKARGGYGTK|TNACRCCTANGTGTG)|FOXA3_NSYTAWGTAAACAA|(?:PAX7_NSGTCACGSNNR|MEOX[12]_NTCG)TT|HOX(?:D(?:10_NG(?:YAA|TCG)|9_GTCG)TA|C9_G(?:YAA|TCG)TA)AA|HMX2_NCCAMTTA|(?:HOX(?:A2|D4)_NTM|(?:MEOX[12]_NY|H(?:ESX1_CT|OX(?:(?:B5|A1)_N|D3_Y)T)|GBX2_NC)A|(?:V(?:SX(?:2_SY|1_C)|AX2_N)|LHX(?:5_S|8_C))YA|PRRX2_CYA)ATT)A|POU5F1_NWWTATGCTAATKAR|N(?:FI[BC]_NTTGGCNNNNTGCCAR|(?:KX(?:2\-(?:3_NNCACTTR|8_NNCACTTS)|6\-2_NTCATT)|R5A1_NYCAAGGTC)A)|ETV7_NMGGAARNNYTTCCK|PAX7_NNATTCGTCACGST|RXRG_NRGGTCAAAGGTCA|MAF_NYGCTGA(?:YG|S)TCAGCR|TFAP2A_NSCCYNRGGS|(?:EGR3_NMCGCCCACG|FOXL2_NAYRTMAA)CA|VENTX_NGYAATTAG|HOX(?:A9_RTCGTAA|B7_NGTAATT)AN|TEAD2_NRCATTCCW|RHOXF2_NTAATCC|PITX[12]_YTAATCC|(?:OTX2|CRX)_NTAATCC)N_F|(?:N(?:HLH1_NKGNMKCAGCTGCGYCM|R2F[16]_NRGGTCAAAGGTCA)|FLI1_NACCGGATATCCGGT|MAFF_NYGCTGASTCAGCR|ERG_NACCGGATATCCGGT|(?:HOX(?:(?:A13_NCTCG|C1[01]_NRTCG)TAAA|(?:A10_NGY|C1(?:0_N|1_R)GY)AATAAA|D9_GYAATAAA|A5_NYAATT)|(?:(?:(?:LMX1B_NWWYT|DLX[3-5]_NY|MSX1_NC)AA|ISL1_SCAC)|(?:ALX3_C|DLX2_N|E(?:MX1_N|SX1_Y))YAA)TT)A|EL(?:F2_NATG|K1_NAC)CGGAAGT|ESRRA_NYCAAGGTCA|GSC_YTAATCC)N_F|(?:THRB_NYGACCTNNNNYGACCT|IRF9_NYGAAASYGAAAC|R(?:ARB_NRGGTCRT|XRG_NRGGTCAY)GACC|FOSL1_NRTGAYGTCA|ATF2_NRTGAYGTMA|JDP2_NRTGASTCA|MAFG_TGCTGACG)YN_F|TFCP2_AWCCGGWTNNAWCCGGWT_F|(?:F(?:ERD3L_GYNNCATATGNNAC|OSL1_RATGAYACG)|S(?:OX8_ACAATNNNNNNATTGT|NAI3_NRCAGGTGCR)|(?:POU4F3_ATGCATWATGCA|DMRTA1_WWTTGWTACAT)T|BHLHE23_ANCATATGNT|HOXA13_NCCAATAAAAN|(?:MEIS2_TGACANNTGTC|LHX6_TRATTGCAATY|DMRTC2_GAACGATAC)A|PHOX2B_TAATTAGATTA|NEUROD2_RMCATATGYY|MAFG_TGCTGANNNTGCR|I(?:RF2_YGAAASYGAAAS|SX_CTAATTAR)|MIXL1_TAATYNRATTA|ALX1_TAATTAGATTA|HOXB4_RTMATTAR|LHX9_CYAATTAN)_F|(?:LEF1_WCATCGRGRCGCTGW|DMRTC2_WWTTGNTACATN)_F|P(?:OU4F3_NTNAATWATGC|AX7_NTAATYGATT)AN_F|(?:CREB3L1_TGCCACGTGGCA|T(?:GIF2LX_TGACANNTGTCA|FAP4_A(?:NCATATGN|WCAGCTGW)T)|PKNOX1_TGACANNTGTCA|IRF5_NYGAAACCGAAACY|NEUROG1_RNCATATGNY|LEF1_ASATCAAAS)_F|(?:IRF8_NYGAAASYGAAAS|OVOL2_NWWCCGTTAYN|MYO(?:D1_(?:NAA|YGT)CANNTGT|G_(?:NAA|CGT)CANNTGT)|(?:CEBPG_NRTTGCGY|DBP_NRTTAYGT)AA|(?:CREB5|BATF3)_NRTGAYGTCA|JDP2_NRTGAYGTCA|MSC_NRNCATATGN|ASCL2_NRCAGCTG|HEY2_NGCACGTG)YN_F|KLF15_NCCMCGCCCMYN_F|ESRRG_NYCAAGGTCAN_F|SIX1_NSRTATCRYN_F|BARHL2_NTAATTGN_F)L)|(?:ESR1_NAGGTCANNNYGACCT|MAFF_NYGCTGAYRTCAGCR)N_FL)|NRL_NWWWNTGCTGACN_FL)|NR4A1_NAAAGGTCAN_eDBD)|(?:(?:(?:(?:(?:(?:ELF3_ACMAGGAAGNNNNNNNNNWWWW|GATA3_WGATAAC?GATC)|LMX1B_CTCGTTA)W|YY1_NGCCATYTTTGRCNNWNYGTGCT|NEUROG2_RMCATATGYY|MIXL1_TAAYNKCGTTA|PROP1_TAATTRCGTTA|HOXB4_RTCGTTAR)|(?:(?:(?:(?:(?:(?:CREB(?:3L1_TGCCACR|1_NRTGAYG)TCAY|E(?:(?:LF(?:5_NANNA|1_NATGM)|LF1_NACCM)|TV4_NRCM)GGAAGT|FLI1_NACMGGAART)|(?:ETV4_NCAGGAAGGAAGT|MSX1_NTCGTTA))|(?:H(?:SF[12]_NGAANNTTCYRGA|OX(?:(?:(?:A5_R|B[57]_R)|A2_R)|D4_R)TCGTT)|(?:(?:GBX2_NT|DLX[3-5]_NT)|(?:ALX3_N|LHX9_M|VSX1_N)T)CGTT)A)|NKX2\-3_NTCGTTGA)|(?:ATF3_NRTGAYGTCA|MSC_NRACAGCTGT)Y)N|SNAI2_NRCAGGTGCR))|(?:(?:RUNX3_NWAACCACRNNNACCACRA|FOXA1_NSYTAWGTAAACAA|P(?:OU5F1_NTATGCGCA|RRX2_MTCGT)T|CDX4_NGYAATAAA|(?:(?:HOX(?:A1_R|C[48]_R|D3_R)|LHX(?:5_N|6_M|8_M|4_Y)|VSX2_N|ISX_M)TCG|LHX6_CYAA)TT)A|(?:PAX(?:8_NSGTCRCGCWTSANYGN|6_NYACGCNYSANYGM)N|NR2F1_NRGGTCRNYGACC|SIX2_MCGTATCR)Y|POU6F1_NTAATGAKATGCR|ONECUT2_NTATTGATTW|ETV7_NYTTCCNGGAAR|(?:DMRT1_NNTYGNWACA|ERG_NACMGGAAR|JUN_NATGA[CS]TCA)T|SPIB_RAWWGRGGAAGT|(?:CREB3_NGCCACR|FOSL1_NATGAS)TCAY|CREB3_NRTGAYGTCAY|ELF2_NACCAGGAAGT|XBP1_N(?:KMCACR|RTGAYG)TCAY|CDX4_NGTCGTAAAN|NKX2\-5_NTCGTTGA|E(?:LK4_NRCMGG|TV1_NACMGK)AWGT|USF1_RNCAYGTGAC|KLF3_NRCCACGCCC|RARB_NAAAGGTCR)N)|(?:POU6F1_NTATGYTAATKA|ONECUT1_NTATTGATCS|YY(?:1_NGCSGCCATY|2_NKCSGCCATT)TT)GN)_FL)|(?:(?:(?:(?:CREB(?:3L1_TGCCACR|1_NRTGAYG)TCAY|E(?:(?:LF(?:5_NANNA|1_NATGM)|LF1_NACCM)|TV4_NRCM)GGAAGT|FLI1_NACMGGAART)|(?:H(?:SF[12]_NGAANNTTCYRGA|OX(?:(?:(?:A5_R|B[57]_R)|A2_R)|D4_R)TCGTT)|(?:(?:GBX2_NT|DLX[3-5]_NT)|(?:ALX3_N|LHX9_M|VSX1_N)T)CGTT)A)|NKX2\-3_NTCGTTGA)|SPDEF_NAMCAGGATGT)N_eDBD))|(?:(?:HSFY[12]_NCATTCYAAWCATTCY|FOXE1_NMYTAAAYAAAC)AW|(?:TBX20_NAGGTGTGAASGYGTG|MAFA_NTGCTGA(?:YG|N)TCAGC|POU(?:2F2_NY|3F1_NT)ATGCGCAT|(?:NKX3\-[12]_NT|(?:LHX1|DLX6)_NT|M(?:SX2|NX1)_NT)CGTT|HOXB1_GTAATT|(?:HOXA4_R|(?:(?:GSX2_S|ISX_C)|VSX2_Y))TCGTT|(?:HOX(?:B(?:1_M|6_R)|(?:A7|B[28])_R|D[18]_R)|LMX1A_C|GSX1_M|ALX4_N|EVX2_S|EVX1_R|PDX1_R|SHOX_S|RAX_C)TCGTT|UNCX_NTCGTT)A|(?:IRX3_NACGYRNNNNNNYGC|(?:ETV5_NCAGGAA|E(?:LF4_NAC|TV5_NR)CM|GABPA_NACM|FEV_NACM)GGAA|ETV1_NACMGGAW)GT|(?:M(?:AX_NCATGTGNNNNNCAT|LX_NCAY)G|FIGLA_NMCACC|TCF4_NCACC)TG|(?:BCL6(?:B_NYGCTTTCTAGGA|_N(?:TGCTT|YGTAA)TCTAGGA)A|JUND_N(?:RTGAC|ATGAS)TCA|ERG_NACAGGAAR)T|(?:CREB3L1_NTGCCACGYGTA|TFAP2C_NGCCYNRGG)C|(?:PAX9_NSGTCRCGCWTSANY|POU3F[14]_NTAATGAKATGC|GLIS1_KACCCCCCACGWW|GLIS2_RCCCCCCRCGWW)G|POU(?:3F(?:2_NTAATKAK|1_NTAATTW)ATGCG|1F1_NTAAT(?:GAK|TT)ATGCG|3F2_NTAATTWATGCG|2F3_NYATGCGCATR)|(?:N(?:R2F6_NRGGTCRNYGACC|PAS2_NMCAYGYG)|(?:CREB3L4_(?:YGCCACR|NRTGAYG)|(?:CREM|ATF7)_NRTGAYG|FOSB?_NRTGAYG)TCA|(?:ONECUT3_NT|CUX1_NY)ATTGAT|TFE(?:[3B]|C)_RNCAYGTGA|J(?:UNB|DP2)_NATGASTCA|SIX(?:3_NS|6_NY)RTATCR)Y|(?:NFATC[12]_NTTTCCGCGGA|HSF4_NGAANNTTCYRG|CDX1_NGTCGTAA)AA|ONECUT2_NTATTGATY|KLF1(?:5_RCCACGCCCMY|7_NGCCACRCCCW)|CDX2_NRTCGTAAANN|MYBL2_NTAACSGTTA|S(?:PIB_RWWGRGGAAGT|CRT[12]_NGCRACAGGT)|TBX1_NNAGGTGTGAN|NR4A1_NAAAGGTCR|GCM1_RTRNGGGT)N_eDBD)|ARNTL_RTCAYGTGMN_eDBD)_meth|(?:(?:FOXP1_NTGTTTRNNNNNNNNNNNNNNNNWCAA|RXRB_NRGGTCAAAGGT|TCFL5_NCACGYG)CA|(?:T(?:BX19_NANGTGTKA|_NANGTGTGAN)NNNTNACACC|GRHL1_NAACCGGT|OSR2_NGCTACYG)T|FOXA2_NWNWGTMAATATTKRYNYW|(?:PAX4_NATTTCACGCWTSANYGNN|(?:CEBPE_NRTTGCGYA|ATF6B_TGCCACGTC)A|HAND2_AACACCTG)Y|PAX1_NSGTCACGCWTSANYG|HNF4A_NRG(?:GTCAAAGTCCR|TCCAAAG(?:GT|TC)CR)|(?:P(?:AX(?:7_NSGTCACGSNWR|4_NYACGCTAA)T|OU3F4_NTATGCGCA)T|N(?:FATC4_N(?:TTTCCRYGG|AYGGA)AA|KX6\-3_NTMATTA)|T_NTCACACNTANGTGTG|(?:E2F7_NTTTCCCGCC|HOXC13_NCTCGTA)AA|(?:LBX2_CTMAT|VSX1_Y)TAATT|FOXK1_NWYGTAAAY|RFX7_NGTTGCY|HMX1_NCAMTTA)A|(?:N(?:R3C2_NGNACRNNNYGTN|FKB2_NGGGGAWNYMC)|(?:RFX3_NGTTGCCWAGCA|NFAT5_NYGGAAANNT)A|FOXO3_NTCCCCACA|GSC2_YTAATC)C|CUX2_NTGATCGATYR|NFE2_NATGASTCAT|BARHL1_NTAATTG)N_eDBD|(?:(?:(?:(?:CPSF4_MCCNCCNCCNCCCCNCCCCCNCCA|N(?:EUROD1_AAWTANNNNNNCATATGN|FIX_NTTGGCNNNNTGCCAR|(?:KX2\-5_NCCACTTR|R2E1_NAAAGTC)A)|IRF3_NSGAAANSGAAASSGAAAS|(?:THRB_NTGACCTNNNNNA|RARB_NRGGTCANNR)GGTCA|TFAP2E_(?:TGC|NG)CCNNNGGC|CREB3_NGCCACGTGKM|(?:FOXI1_NANGTAAACA|HOXC4_NTMATT)A|MBNL2_NYGCTTYGCTT|POU6F1_NTAATKAGS|HOXA9_GYAATAAAN|SOX14_CCGAACAAT|BATF_NMATGACAC|RHOXF1_NGGATCA)N|SOX10_AACAATNNNNNNATTGTT|(?:LIN28B_CGCGANNNNNCAGC|MEF2B_TGTTACCATATNNG)G|FERD3L_GYNNCAGCTGNNAC|IRF6_ACCGAWACY)|(?:KLF13_NRCCACGCCCMYN|GATA5_WGATAACGATCT|PROP1_TAATTNNATTA|(?:GATA5_NWGATAASR|LHX4_NTAATTA)N|HEY1_NGCACGTGYN))|SNAI1_NRCAGGTGCR)_FL_(?:meth|repr)|(?:(?:NFATC3_NYGGAAANNNNNNNTTTCC|RFX5_NGTTGCYRNNNGTTGCY)R|ETV3_NNAGGAANNNNNNNTTCCTN|(?:RORB_NAWNTRGGTCANTRGGTC|NFATC1_NTTTCCRNNNNYGGAA|NR6A1_NTCAAGKTCAAGKTC|RFX5_NYRRCAACSGTTGCY|FOX(?:J2_NWWGTTGTAA|A1_NWRTGTAM)AY|(?:POU2F2_NTGCATATG|FOXC2_NYAAAYAAA)C|(?:EOMES|TBX2)_NAGGTGTG)A|(?:(?:NR5A2_NCAAGGTCRNGACCT|(?:PRDM1_NRGNGAAA|DPF1_NCTATAG)G)T|POU1F1_NTATGCWAATKA|SOX18_NACAAT)G|(?:H(?:OXD11_NRTCGTAAAANN|MBOX1_NCTAG)|PRRX2_NTCG)TTA|(?:NR(?:1I2_NYGAACYNNNYGAA|2C1_NRGGTCRYGAC)|SP2_NYWAGYCCCGCCCM)CY|MTF1_NYTTTGCACACGRYNY|E(?:2F2_NWTTTGGCGCCAWWW|TV3_NACCGGATATCCGGT)|P(?:AX3_NYRATTMGTCACGS|OU2F3_NTATGCWAA)T|(?:(?:RFX2_NGTTRCCATGGY|FOXD3_NYWAYRTA)AA|HIC1_NRTGCCAM|DPRX_NGMTAATC)C|SOX4_GAACAAAGR)N_eDBD_(?:meth|repr)|GFI1B_NMAATCACNGCANNNCACTMN_eDBD_(?:meth|repr)|(?:(?:BCL11B_GTGAACRNNNNNNYTACA|GATA1_GATAANNNNNTTAT)C|IRF6_RGTWTCGNNNNNNYGAWACY|NR5A2_YGACCTTGNNNCAAGGTCR|S(?:OX10_AACAATNNNNNATTGTT|RF_CCWTGTWNGG)|HOXA13_NCCAATAAAAM|YBX1_YGTWCCAYC)_eDBD_(?:meth|repr)|(?:(?:(?:KLF11_NMCACGCCCNNNNCACGCCCMC|CREB3L4_YGCCACGTGGCA|T(?:CF7_(?:WCATCGRGRCGCTGW|ASATCAAAS)|GIF[12]_TGACANNTGTCA)|DMRT(?:A2_NNTTGW|3_NWWTTGN)TACATT|ARGFX_YTAATCTAATTAG|(?:PKNOX2|MEIS3)_TGACANNTGTCA|B(?:HLHE23_ANCATA|ARHL2_NTAAT)TGNY|(?:BHLHE22_ANCATATGN|OLIG2_AACAGCTGT|ATOH1_ANCAGCTGN|ATOH1_ANCATATGN|ATOH7_ANCATATGN)Y|MEIS2_TGACANNYGTCA|BHLHE41_GTCACGTGAC|MEF2[BD]_CCWWATWWRG|SNAI1_NRCAGGTGYR|H(?:ES5_GGCACGTGY|OXB6_YTAATTR)Y|HES1_GGCRCGTGNS|LHX9_CYAATTAR|ISX_CTAATTAN)_e|(?:(?:RORB_NAWNTRGGTCRTGACCYANW|TBX20_NAGGTGTGANNNTCACACC|PAX7_NNATTMGTCACGS|(?:ELF4_NATGCGGAA|OSR1_NGCTACY)G)T|FOXB1_NWNWGTMAATATTRACWYW|(?:GFI1_NMAATCACNGCNNNNCACT|EGR1_NMCGCCCACGC)M|(?:N(?:R(?:1D[12]_NAWNTRGGTCANTRGGTC|(?:5A2_NYCAA|2C2_NR)GGTC)|KX2\-3_NCCACTTR)|R(?:ORC_NWWN|ARA_)NRGGTCANNRGGTC|(?:(?:(?:(?:PPARD_NRRGGTC|RARG_NRGGTCA)|RXRA_NRGGTC)|THRB_NRGGTC)A|ESRRB_NYC)AAGGTC|HNF4A_NRGGTCAAAGGTC|(?:PAX3_N(?:SGTCACGSNN|TAATYG)|VSX2_YTA)ATT|(?:(?:POU4F1_NTNNATWAT|(?:ATF6_NGRTGACGTG|EGR4_NMCGCCCAC))G|FOX(?:I1_NWWNYG|(?:(?:C2_NWAN|Q1_NTAY)R|(?:J3|O4)_NYG))TAAA)C|POU3F2_NTATGCGCAT|TBX(?:(?:15|[36])|21)_NAGGTGTG|(?:NKX6\-2_NY|HOX(?:B[57]_NY|A2_NY|D4_NY)|PRRX2_NY|(?:HOXD1_N|EMX2_Y|PDX1_Y)T|LMX1A_YT|(?:(?:GBX2|EN1)|DLX6)_NY|M(?:SX2_NC|NX1_NY)|TLX2_NC|BSX_NY|RAX_YT)AATT|(?:PHOX2(?:A_C|B_N)|HOX(?:(?:A7|B[28])|D8)_N|ALX4_C|DRGX_Y|E(?:VX|N)2_N|EVX1_N|VAX1_N|NOTO_N|ARX_C)YAATT|(?:ISL2_SCAC|LBX2_CTCG|BSX_NTCG)TT)A|BACH2_NWANCATGASTCATSNTW|(?:NFATC(?:2_NTTTCCRNNNN|3_NTTTCCR)YGGA|(?:HSFY[12]_NTTCGAANNNTTC|TBX18_NRAGGTGT)G|(?:E2F(?:3_NTTTTGGCGCCA|8_NTTTCCCGCC)|HOX(?:(?:(?:(?:C12_GGT|A11_RGY)AA|B(?:13_NC|9_G)TCG)|(?:A11|C12)_NRTCG)TA|D(?:1(?:3_NCC|0_GY)AATA|13_NCTCGTA|12_NRTCGT|10_RTCGTA|9_RTCGTA)))A)AA|(?:PAX(?:2_NSGTC|4_NTY)ACGCWTSANYGNN|PPARD_NRRGGTCRTGACCY|T(?:HRB_NRRGGTCRTGACCY|CF21_NACCATATGK|CF21_NAACAGCTGY|EF_NRTTAYGTAA)|R(?:(?:AR[AG]_NRGGTCR|XRB_NRGGTCR)|ORC_NRGGTCR)TGACC|MSGN1_NRCCAWWTGK|MESP2_NAMCATATGK|ATF(?:6(?:B_NRTGAY|_NRTGAC)GTC|2_NRTGAYGTC)A|CEBP[BD]_NRTTGCGYAA|MYF6_(?:CGTCANNTGT|NAACANNTGW)|ASCL1_NRCAGCTG|HES(?:2_GGCR|7_GGCA)CGTG|SIX2_NCGTATCR)Y|TFCP2L1_NCCGGNNNNNNCCGG|(?:MAFG_NYGCTGA(?:YR|S)TCAGC|GATA4_NWGATAAS|ARGFX_NCTAATTA|NR4A2_NAAAGGTC)R|(?:RFX(?:3_NGTTGCCATGGC|[14]_NGTTRCCATGGY)AA|NR3C1_NGWACANNNYGTW|MAF[AG]_NWWWNTGCTGA|TFAP2B_NGCCNNNGG|SOHLH2_NGCACGTG)C|S(?:KOR[12]_NWNNKKTAATTAA|OX(?:1(?:2_ACCGAACAAT|4_NGAACAATG)|9_MGAACAATR|8_AGAACAATG|30_GAACAAT)|IX4_NCGTATCAT|HOX_CYAATTA)|SP(?:1_NWRG|[89]_N)CCACGCCCMY|KLF14_NRCCACGCCCMY|POU2F2_NTATGCWAAT|BHLHA15_NMCA(?:GC|TA)TGK|NFATC3_NAYGGAAAM|(?:NKX3\-[12]_NCCAC|HMX2_NCAM)TTAA|SP3_NRCCMCGCCCMY|(?:(?:HOXA6_NG|LBX2_NC)YAATT|RARA_NRRGGTC)AN|(?:KLF(?:(?:(?:(?:16_N|2_NR)CCACR|4_NRCCMCG)|5_NMCACG)|6_NRCCACG)C|DMBX1_NTAAT|PITX(?:[12]|3)_NTAAT)CC|TCF12_NCACSTG)N_e|(?:N(?:HLH1_NKGNMKCAGCTGCGYCM|R2F[16]_NRGGTCAAAGGTCA)|FLI1_NACCGGATATCCGGT|MAFF_NYGCTGASTCAGCR|ERG_NACCGGATATCCGGT|(?:HOX(?:(?:A13_NCTCG|C1[01]_NRTCG)TAAA|(?:A10_NGY|C1(?:0_N|1_R)GY)AATAAA|D9_GYAATAAA|A5_NYAATT)|(?:(?:(?:LMX1B_NWWYT|DLX[3-5]_NY|MSX1_NC)AA|ISL1_SCAC)|(?:ALX3_C|DLX2_N|E(?:MX1_N|SX1_Y))YAA)TT)A|EL(?:F2_NATG|K1_NAC)CGGAAGT|ESRRA_NYCAAGGTCA|GSC_YTAATCC)N_e|N(?:R2F1_NRGGTCRNTGACCYN|EUROG2_RNCATATGNY)_e|(?:CREB3L1_TGCCACGTGGCA|T(?:GIF2LX_TGACANNTGTCA|FAP4_A(?:NCATATGN|WCAGCTGW)T)|PKNOX1_TGACANNTGTCA|IRF5_NYGAAACCGAAACY|NEUROG1_RNCATATGNY|LEF1_ASATCAAAS)_e|(?:IRF8_NYGAAASYGAAAS|OVOL2_NWWCCGTTAYN|MYO(?:D1_(?:NAA|YGT)CANNTGT|G_(?:NAA|CGT)CANNTGT)|(?:CEBPG_NRTTGCGY|DBP_NRTTAYGT)AA|(?:CREB5|BATF3)_NRTGAYGTCA|JDP2_NRTGAYGTCA|MSC_NRNCATATGN|ASCL2_NRCAGCTG|HEY2_NGCACGTG)YN_e|(?:(?:HOXA10_NGTCGTAAAAN|(?:(?:ELK3_NACCGGAAGTN|OLIG3_ACCATATGKT)|DLX1_NYAATTAN))|PBX1_KTGATTGAYR)_e|(?:ATF3_NRTGAYGTCA|MSC_NRACAGCTGT)YN_e|S(?:NAI2_NRCAGGTGCR|IX1_NSRTATCRYN)_e|(?:MAF_NYGCTGA|OTX1_NTAATC)CN_e)|(?:KLF13_NRCCACGCCCMYN|GATA5_WGATAACGATCT|PROP1_TAATTNNATTA|(?:GATA5_NWGATAASR|LHX4_NTAATTA)N|HEY1_NGCACGTGYN)_e)DBD|(?:ELF3_ACCCGGAAGNNNNNNNNNWWWWW_e|NR2F6_NRGGTCRNTGACCYN_e|(?:(?:(?:HSF1_NGAANNTTCNNGAA|ELK3_NTCGTAAATGC)N|LEF1_WCATCGRGRCGCTGW)|DMRTC2_WWTTGNTACATN)_e|P(?:OU4F3_NTNAATWATGC|AX7_NTAATYGATT)AN_e|(?:CREB(?:3L1_TGCC|1_NRTG)ACGTCAY|HSF2_NGAANNTTCNNGAA)N_e|SPDEF_NAMCCGGATGTN_e|E(?:(?:LF(?:2_NACC|1_NATG)|LF1_NACC)|TV4_NRC)CGGAAGTN_e|FLI1_NACCGGAARTN_e)DBD|(?:(?:ESR1_NAGGTCANNNYGACCT|MAFF_NYGCTGAYRTCAGCR)|NRL_NWWWNTGCTGAC)N_eDBD_(?:meth|repr)|(?:(?:PRDM4_YRRCNGTTTCAAGKCYCCC|ATF4_GGATGACGTCATC|GSX1_CTAATTA)C|B(?:CL6B_RYGTAATCGAGGAATW|ARHL2_NTAAACGNY)|G(?:LI2_NGACCACCCACGWYG|SX2_STMATTAR)|POU3F[24]_NTATGCWAATKAN|(?:E2F4_WTTTGGCGCCAWW|GATA6_NGATAACGATC)W|ATF6B_YGCCACGTGGCA|SREBF2_ATCACG(?:CC|TG)AY|OLIG3_ANCAGCTGTT|JDP2_GATGASTCATC|OLIG2_ANCATATGNY)_eDBD|(?:BACH2_NWWNNATGACGTCAYNNWW|(?:(?:RUNX2_NWAACCGCANNNACCGC|HSF4_NGAANNTTCNNG)A|NFATC[12]_NTTTCCATGGAA|(?:POU(?:4F3_NTGCATW|2F2_NTMATT)ATG|FOXG1_NAYRYAAA)C|(?:HOX(?:B(?:13_NCC|9_GY)|C13_NCC)AATA|CDX(?:1_NGYMATA|2_NYAAT))AA|SREBF1_NTCACGTG|HOXA4_RTMATT|HOXB1_STAATT|LHX1_NYAATT|UNCX_KTAATT)A|HSFY2_NCRTTCGAAWCRTTCGAW|(?:P(?:OU3F1_NAATTANNNNNTAA|ROX1_NAAGRCGTC)T|(?:IRX3_NACATGNNNNNNCAT|E(?:LF4_NAC|TV5_NR)CCGGAA|GABPA_NACCGGAA|ETV1_NACCGGAW|ETV2_NRCCGGAA|FEV_NACCGGAA)G|SCRT2_NGCAACAGG|GCM1_RTGCGGG)T|(?:GMEB2_NYACGTANNNTACGT|MAFA_NYGCTGA(?:YG|S)TCAGC|POU3F4_N(?:TAATKAKATGC|ATTATGCAT))R|UBP1_NNCCGGNNNNNNCCGGN|CREB3L1_NTGCCACGTGTAC|BCL6B_NYGCTTTCKAGGAAT|(?:PAX9_NSGTCACGCWTSANY|GLIS1_NACCCCCCACGWM|MYCN_NKCACGTG)G|POU(?:3F(?:(?:2_NTAATKAKATGCA|4_NTAATTWATGCR|1_NTAATTWATGCN)|2_NTAATTWATGCR)|1F1_NTAAT(?:GAK|TT)ATGCR)|FOXD2_NAACAATAAYAWW|POU3F1_NTATGCWAATNN|(?:IRF7_NYGAAANYGAAAN|(?:(?:CREB3L4|(?:CREM|ATF7))_NRTGACGTC|FOSB?_NRTGACGTC)A|ONECUT[13]_NYATCGAT|CLOCK_NMCAYGTG|NPAS2_NMCACGTG|TFE(?:[3B]_N|C_M)NCACGTGA|USF2_MNCACGTGA|SIX3_NSSTATCR)Y|(?:ONECUT2_NTATCGAT|ERG_NACCGGAAR)Y|KLF15_NCCACGCCCMY|TFAP2C_NGCCYNMGGC|TBX1_NWAGGTGTGAR|JUND_NRTGACGTCAT|TCF4_NCACSTG)N_eDBD|(?:ELF3_ACCCGGAAGNNNNNNNNNWWWWW_F|P(?:AX6_NYACGCNTSANYGNNYN|BX1_KTGATTGAYR)_F|N(?:R2F1_NRGGTCRNTGACCYN|EUROG2_RNCATATGNY)_F|(?:CREB(?:3L1_TGCC|1_NRTG)ACGTCAY|HSF2_NGAANNTTCNNGAA)N_F|SPDEF_NAMCCGGATGTN_F|E(?:(?:LF(?:2_NACC|1_NATG)|LF1_NACC)|TV4_NRC)CGGAAGTN_F|FLI1_NACCGGAARTN_F)L|(?:(?:FOXA(?:1_NWR|3_NWN)WGTMAATATTKRYNYW|(?:TBX20_N(?:AGGTGTKARGGYGTK|TNACRCCTANGTGTG)|FOXA3_NSYTAWGTAAACAA|(?:PAX7_NSGTCACGSNNR|MEOX[12]_NTCG)TT|HOX(?:D(?:10_NG(?:YAA|TCG)|9_GTCG)TA|C9_G(?:YAA|TCG)TA)AA|HMX2_NCCAMTTA|(?:HOX(?:A2|D4)_NTM|(?:MEOX[12]_NY|H(?:ESX1_CT|OX(?:(?:B5|A1)_N|D3_Y)T)|GBX2_NC)A|(?:V(?:SX(?:2_SY|1_C)|AX2_N)|LHX(?:5_S|8_C))YA|PRRX2_CYA)ATT)A|POU5F1_NWWTATGCTAATKAR|N(?:FI[BC]_NTTGGCNNNNTGCCAR|(?:KX(?:2\-(?:3_NNCACTTR|8_NNCACTTS)|6\-2_NTCATT)|R5A1_NYCAAGGTC)A)|ETV7_NMGGAARNNYTTCCK|PAX7_NNATTCGTCACGST|RXRG_NRGGTCAAAGGTCA|MAF_NYGCTGA(?:YG|S)TCAGCR|TFAP2A_NSCCYNRGGS|(?:EGR3_NMCGCCCACG|FOXL2_NAYRTMAA)CA|VENTX_NGYAATTAG|HOX(?:A9_RTCGTAA|B7_NGTAATT)AN|TEAD2_NRCATTCCW|RHOXF2_NTAATCC|PITX[12]_YTAATCC|(?:OTX2|CRX)_NTAATCC)N_F|(?:N(?:HLH1_NKGNMKCAGCTGCGYCM|R2F[16]_NRGGTCAAAGGTCA)|FLI1_NACCGGATATCCGGT|MAFF_NYGCTGASTCAGCR|ERG_NACCGGATATCCGGT|(?:HOX(?:(?:A13_NCTCG|C1[01]_NRTCG)TAAA|(?:A10_NGY|C1(?:0_N|1_R)GY)AATAAA|D9_GYAATAAA|A5_NYAATT)|(?:(?:(?:LMX1B_NWWYT|DLX[3-5]_NY|MSX1_NC)AA|ISL1_SCAC)|(?:ALX3_C|DLX2_N|E(?:MX1_N|SX1_Y))YAA)TT)A|EL(?:F2_NATG|K1_NAC)CGGAAGT|ESRRA_NYCAAGGTCA|GSC_YTAATCC)N_F|(?:THRB_NYGACCTNNNNYGACCT|IRF9_NYGAAASYGAAAC|R(?:ARB_NRGGTCRT|XRG_NRGGTCAY)GACC|FOSL1_NRTGAYGTCA|ATF2_NRTGAYGTMA|JDP2_NRTGASTCA|MAFG_TGCTGACG)YN_F|TFCP2_AWCCGGWTNNAWCCGGWT_F|(?:F(?:ERD3L_GYNNCATATGNNAC|OSL1_RATGAYACG)|S(?:OX8_ACAATNNNNNNATTGT|NAI3_NRCAGGTGCR)|(?:POU4F3_ATGCATWATGCA|DMRTA1_WWTTGWTACAT)T|BHLHE23_ANCATATGNT|HOXA13_NCCAATAAAAN|(?:MEIS2_TGACANNTGTC|LHX6_TRATTGCAATY|DMRTC2_GAACGATAC)A|PHOX2B_TAATTAGATTA|NEUROD2_RMCATATGYY|MAFG_TGCTGANNNTGCR|I(?:RF2_YGAAASYGAAAS|SX_CTAATTAR)|MIXL1_TAATYNRATTA|ALX1_TAATTAGATTA|HOXB4_RTMATTAR|LHX9_CYAATTAN)_F|(?:LEF1_WCATCGRGRCGCTGW|DMRTC2_WWTTGNTACATN)_F|P(?:OU4F3_NTNAATWATGC|AX7_NTAATYGATT)AN_F|(?:CREB3L1_TGCCACGTGGCA|T(?:GIF2LX_TGACANNTGTCA|FAP4_A(?:NCATATGN|WCAGCTGW)T)|PKNOX1_TGACANNTGTCA|IRF5_NYGAAACCGAAACY|NEUROG1_RNCATATGNY|LEF1_ASATCAAAS)_F|(?:IRF8_NYGAAASYGAAAS|OVOL2_NWWCCGTTAYN|MYO(?:D1_(?:NAA|YGT)CANNTGT|G_(?:NAA|CGT)CANNTGT)|(?:CEBPG_NRTTGCGY|DBP_NRTTAYGT)AA|(?:CREB5|BATF3)_NRTGAYGTCA|JDP2_NRTGAYGTCA|MSC_NRNCATATGN|ASCL2_NRCAGCTG|HEY2_NGCACGTG)YN_F|KLF15_NCCMCGCCCMYN_F|ESRRG_NYCAAGGTCAN_F|SIX1_NSRTATCRYN_F|BARHL2_NTAATTGN_F)L|(?:(?:TFCP2_AWCCGGWTNNAWCCGGWT|PAX6_NYACGCNTSANYGNNYN)|ESRRG_NYCAAGGTCAN)_eDBD|(?:(?:E(?:T(?:S2_NACCGGANNNNNNTCCG|V1_NACCGKAW)|LK4_NRCCGGAW)|HES6_GGCACGT|GCM2_RTGCGG)GT|(?:PAX8_NSGTCACGCWTSANYGNN|M(?:LX_YNCACGTGM|AX_RNCACGTG)|SIX2_MCGTATCA)Y|NHLH2_NKGNMGCAGCTGCGYCM|(?:GMEB1_NKACGTANNNTACGT|E(?:LK|TV)4_NTCGTAAATG)M|FOXA1_NMYTAWGTAAACAAA|E(?:2F1_NWTTTGGCGCCAWWW|RG_NACCGGAART)|POU6F1_NTAATGAKATGYR|ONECUT1_NTATCGATCGN|ONECUT2_NTATCGATCGR|(?:ONECUT2_NTATCGATT|DMRT1_NNTYGNTACA|JUN_NATGACKCA)T|(?:BARX2_NWWAAYC|LHX6_CTA)ATTA|SPIB_RAWWGMGGAAGT|(?:CREB3_NGCCACGTC|USF1_MNCACGTG)AY|CREB3_NRTGACGTCAY|YY(?:2_NKCCGCCATT|1_NGCCGCCATY)TTG|EL(?:F5_NAM|K3_A)CCGGAAGT|(?:FOSL1_NRTGAN|JUN_NATGACG)TCAY|ATF3_NRTGACGTCAY|XBP1_N(?:KMC|RTG)ACGTCAY|RARB_NAAAGGTCA)N_FL|(?:TCF7L1_(?:WCATCGRGRCGCTGW|ASATCAAAS)|KLF17_NMCCACGCWCCCMYY|(?:TGIF2LY_TGACANNTG|(?:BBX_TGAWCNNNGW|DUXA_TRAYNTAA))TCA|BHLHE40_GTCACGTGAC|S(?:OX7_ACAATNNNATTGT|MAD5_YGTCTAGACA)|PTF1A_NYGTCAGCTGNY)_eDBD|(?:(?:FOX(?:P3_NAWTTGTAYGACAAAT|R2_NYRTAWACATAAATNN)|(?:IRF4_NYGAAASYGAAAS|OVOL1_NRWACCGTTATN|HLF_NRTTRYGYAA)Y|(?:EGR2_NMCGCCCACGC|XPA_NCACCTCAC|HOXC8_NTAATT)A|(?:OTX1_NTAATCCN|RARG_NRGGTCA)Y|TEAD1_NRCATWCC|TGIF2_NTGACAG)N|(?:(?:NR2F6_NRGGTCRNTGACCYN|(?:HOXA10_NGTCGTAAAAN|(?:OLIG3_ACCATATGKT|DLX1_NYAATTAN)))|(?:M(?:AF_NYGCTGACNNNGCR|EF2C_CCWWATWWRG)|LHX8_TRATTGCAATYA|KLF12_NRCCACGCCCW)))_FL|(?:ESR1_NAGGTCANNNYGACCT|MAFF_NYGCTGAYRTCAGCR)N_FL|(?:CREB3L1_TGCCACGTGTACR|ATF4_GGATGAYGTCATCC|GATA3_NGATAACGATCW|SNAI2_NRCAGGTGCA)_FL|NR4A1_NAAAGGTCAN_eDBD_[12]|ARNT[2L]_RTCACGTGMN_eDBD|NRL_NWWWNTGCTGACN_FL|CDX2_NRTCGTAAAN_eDBD|KLF3_NRCCRCGCCCN_FL|BARHL2_NTAAACGN_FL)$

Time output:
------------

  * Command: grex -c --file /dev/fd/63
  * Elapsed wall time: 0:17.88 = 17.88 seconds
  * Elapsed CPU time:
     - User: 16.18
     - Sys: 1.69
  * CPU usage: 99%
  * Context switching:
     - Voluntarily (e.g.: waiting for I/O operation): 3
     - Involuntarily (time slice expired): 22
  * Maximum resident set size (RSS: memory) (kiB): 8250552
  * Number of times the process was swapped out of main memory: 0
  * Filesystem:
     - # of inputs: 0
     - # of outputs: 72
  * Exit status: 0


taipale_tf_pairs
^taipale_tf_pairs__(?:(?:(?:P(?:OU2F1_FOXO6_RMATATKCNNNNNNNNNNNNN(?:NNN?RWMAA|RWMAA)C|OU2F1_EOMES_NNNTATGCAGYGTK|BX4_HOXA1(?:0_(?:YNNRTAAATC|NTCGTA)|_NYNATM)AATC)|(?:HOXD12_EOMES_(?:AGGYGYGANNNNNNNNNNNNNNN|TMRCACC)TCRTW|(?:TFAP2C_HOXB13_SCCNNNNGGCATNG|HOXC10_TBX21_TMRCACYTMA)TW|GCM2_TEF_RTRCGGGNNNNTTACGT|FOXO1_HOXA10_RWMAACAYCRTW)A|(?:(?:(?:TEAD4_FOXI1_(?:RCATWCCNNNNNNNNNNN(?:N(?:NN?R|R)|R)|GGWATGYG)T|FOXJ2_HOXB13_(?:NTTTATNRNT|TTTWATNRN))M|ETV2_FOXI1_RNCGGAANNA)|FOXJ2_PITX1_NTAATCCNNWM)AAC|(?:TEAD4_HOXA13_RCATWCCNNNNNNNNYNN|HOX(?:D12_TBX21_AGGTGTKAAGTC|B2_HOXB13_NNATCATN)G|POU2F1_HOXB13_NRMATATACCAA|(?:HOXB13_TBX21_ARGTGNNNNNN|GCM1_HOXB13_NCCCGCANNM)A)TAA|(?:(?:HOXB2_ESRRB_TAATK(?:NN|R)NNNNNNAAG|TEAD4_ESRRB_RCATWCNNNNNNAG)|MEIS1_HOXB13_SYMRTAAANCT)GTC|(?:FOXO1_HOXB13_GWMAACANNSYM|GCM1_HOXB13_NCCCGCANNNM|TEAD4_HOX(?:A13_GGWATGNNN|B13_RRAATGCA))RTAA|FOX(?:O1_HOXB13_RWMAACASYMR|J2_HOXB13_RTAAACWNA)TWAA|ELK1_(?:EOMES_RSCGGAANNAGGYGYN|SREBF2_RSCGGAANTSRCGTG|FOXI1_RSCGGAANRTMAAY)|HOXA3_EOMES_TAATKAGGTGNK|TEAD4_EOMES_RGAATGYGTG)A|TFAP2C_DLX3_NSCCNNNRGGCANNNNNN?TAATKR|(?:TEAD4_(?:(?:(?:CEBPD_NTTRCGYAANNNNNNNNRGWAT|(?:CEBPD_NTTRCGYAANNNNNNNRGWAT|(?:(?:CEBPB_NTTRCGYAANNNNNNG|(?:SOX(?:15_NACAATR|6_NNACAATN)NNNNN|SOX15_NACAATRNNNN))GAAT|HES7_GGWATGYNNNNCRCGY)))|GATA3_NGATAASNNNRGWAT)G|TBX21_ANGTGTGAATWC)|ETV2_HES7_NNCACGTGNNNNNCGGAWR|GCM1_SOX2_RTRSGGGNNNATTGTK|FOXJ3_TBX21_WAACAACACM)Y|(?:T(?:FAP2C_HES7_NNCRCGYGNNNNNNN?SCCNNNGG|EAD4_GSC2_RGWATGTTAATCC)|ETV2_RFX5_NCCGGAAGYNNCNTAGCAAC)S|(?:RFX3_FIGLA_GTTGCYNNNNNNNNNNNNCASS|(?:HOXB2_PAX1_NNMATTAGTCACGCWTSR|ELK1_PAX5_RSCGGAACYACGCWYSA)N|PITX1_FIGLA_TAATCCNNNNCASS)TG|(?:M(?:YBL1_(?:(?:(?:FIGLA_NCASSTGNNNNNNN(?:NN?CS|CS)|TBX21_AGGTGTGNCS)|ELF1_NMCCGGAACC)|HOXA13_CTCRTAAAWNNNNRMC)GT|EIS1_ONECUT2_TGACAGNWAATCRA)T|(?:HOXA3_PAX5_YNATTAGTCACGCWTSRN|(?:GCM2_DLX2_RTRCGGGN|TEAD4_DLX2_RCATTCY)NNNNTAAT)T|(?:HOXB2_SOX15_NYMATTANNNNNN?ACA|GCM1_ONECUT2_RTGCGGGNNATCG)AT|TEAD4_EOMES_GGWATGNRAGGTGNN)R|(?:(?:(?:(?:(?:TFAP2C_DLX3_NSCCNNNRGGCANNNNY|HOXB2_SPDEF_ANCCGGATNNNNNN|HOXB2_SOX15_ACAAWRSNNNN?Y|HOXB2_TCF3_NCACCTGNNNNN)M|E(?:TV(?:5_HOXA2_RSCGGWAATKNNNNNNNN|2_HOXA2_NCCGGAAGT)M|RF_HOXA3_RSCGGAWNNNNNNNYM|LK1_EVX1_RSCGGWANNNNYM|TV2_DRGX_RSCGGAWRY)|TEAD4_ALX4_RCATWCYNNNNTAATYRN|HOXB2_SOX15_ACAAWRSNNNNNYM|(?:TFAP2C_DRGX_SCCNNNGGCNNY|E(?:TV2_DLX2_RCCGGAANN|RF_DLX3_RSCGGAA)NNNNY|HOXB2_HOXB13_NNCGTAA|MEIS1_DRGX_TGTC)A|TEAD4_ALX4_GGAATGNNNNNYTA|MEIS1_EVX1_TGACANNNNNTC)|(?:TEAD4_PITX1_RCATWCNNNNG|ETV2_GSC2_RSCGGAANNNNG|GCM2_PITX1_RTRCGGGNN|HOXB2_PITX1_TAATKRNG)G)|(?:(?:TEAD4_PITX1_RCATWC|ETV2_GSC2_RSCGGAA)NNNNN|HOXB2_PITX1_TAATK(?:RNN|A)NN|HOXB2_PITX1_TAATKRNRN|FOXJ2_PITX1_TAAACA)GG)AT|P(?:ITX1_(?:(?:EOMES_RGGTGTKANN|(?:HES7_NNCRCGTGNN|HES7_NC(?:RCGTGN|ACGTG)))NN|TBX21_AGGTGNGAAR)GGAT|OU2F1_DLX2_WTWTGCATANNTAAT))TA|GCM(?:(?:(?:1_(?:(?:FIGLA_CASSTGNNNNNNNNNNNT|FIGLA_CASSTGNNNNNNN(?:N(?:NN)?T|T))G|PITX1_GGATTANNNNNN(?:N(?:NN)?TG|TG))|1_NHLH1_NCAGCTGNNNNNNNTR)|1_NHLH1_NCAGCTGNNNNNNNNTR)|2_FIGLA_NCASSTGNNNNNNNNRTR)CGGG|POU2F1_DLX2_TGMATATKCANNNNN?TAATKR|(?:E2F1_EOMES_NGGTGTGNNNGGCGCSNNNCR|T(?:EAD4_(?:(?:E(?:RG_RSCGGAANNNNNNNNC|LK3_NCCGGAANNNNNNNM)ATW|PITX1_RCATWCYNNNNN?TAAT)|CLOCK_NCACGTGNNNNNNCATW)C|FAP2C_E2F8_NNTCCCGCNNNCCNNNGG))C|(?:MYBL1_MAX_YAACGGNNNN|TEAD4_MAX_RCATTCC)NNNNNNNCACGTG|(?:TFAP4_DLX3_NCAGSTGNNNNNNNG|T(?:FAP4_DLX3_NCAGSTGNNNNNNG|EAD4_DLX2_RGWATGY)|E(?:TV2_DLX3_RSCGGAANNNNNNN|LK1_HOXA3_RSCGG)|GCM2_DLX3_RTRCGGGNNNNNN|GCM1_HOXA2_RTRSGGGNN|MEIS1_D(?:LX2_TGACANNN|RGX_TGACAS))TAATKR|(?:SOX6_TBX21_RGGTGTNNNNNNNNNYATTG|ETV2_SOX15_RSCGGAANNNNNNN?YWTTG|TEAD4_SPDEF_RGAATGCGGAWR)T|(?:MYBL1_MAX_YAACGGNNNNNNNNNNC|TEAD4_MAX_R(?:CATTCCNNNNNNC|GAATGYNN))ACGTG|E(?:LK1_(?:ONECUT2_RSCGGAASNGRTCGAT|FOXI1_RSCGGAANNRTMAAY)AN|TV2_BHLHA15_RSCGGANNCATATGK)|GCM1_FIGLA_CA(?:GCTGNNNN|SSTG)NNCCCGCAY|RFX3_SREBF2_NNRGYAACNTCACGTGAY|HOXB2_RFX5_TAATKRNNNNN?GCAAC|MYBL1_EOMES_RSGTGNNNAACGK|FOXO1_SPDEF_WMSCGGATGTKNW|GCM2_MAX_NTRNGGGNNNCACGTG)_CAP_repr|(?:(?:HOXD12_TBX21_NGGTGTNNNNNNNNNNNNNCACNTNNTW|(?:TEAD4_ESRRB_RCATTCYNNNNCAAGGT|ELK1_FOXI1_RSCGGAANRWMAA|MEIS1_EOMES_AGGTGTTGA)C|(?:GCM1_CEBPB_ATRSGGGNNNNTTR|ETV2_CEBPD_RSCGGANNTTG)CGYA|(?:(?:(?:HOXB13_(?:TBX21_ARGTGNNANNNMW|ETV1_RSCGGAARYNN)|HOXD12_ELK1_NRSCGGAAGNNG|(?:HOXB(?:13_EOMES_ANGTGTSNN|2_HOXB13_NNMATCAC)|GCM2_HOXA13_RTRCGGGTA)A)|HOXD12_HOXA3_NTAAT(?:NRSNY|KRSN)MR)T|E(?:(?:LK1_HOXB13_RSCGGAAGNNG|TV2_HOXB13_NCCGGAANYA)|RF_HOXB13_NNMGGAARNNR)T)AA|MGA_DLX3_YNATTANRGGTGTG|POU2F1_ETV1_NCCGGATATGC|FLI1_FOXI1_GAAAACCGAA)A|(?:POU2F1_EOMES_NNNTATGCNNNGYGANNNNNNNNNNNCR|TEAD4_EOMES_NGYGNNAMATWCYNNTMRCR|ETV2_GSC2_RCCGGANNNNNNNN(?:NN?TAATC|TAATC)|(?:TEAD4_E(?:TV7_RGAATGCGGAARYNNN|OMES_NNGYGYSACAT)T|(?:TEAD4_HOXA13_CYCRTAAATW|MGA_PITX1_RGGTGNTAAK))C)C|(?:TFAP2C_ONECUT2_NAT(?:YGATNNNNNNNNNG|(?:CGATNNNNNNNNG|CGATNNNNN(?:NN)?G))CCTNNGGS|E(?:TV2_EOMES_NGGTGTNNNNNNNNNNNNNNNCCGGAWN|LK1_TBX21_ANGTGNNANNNNNNNNNNNCNNMGGAW|RF_(?:CLOCK_CACGTGNNNNNSR|SREBF2_NNCACGTGACM)GGAAR|2F3_FOXO6_NMATGACACGCGCCM)|(?:(?:TFAP2C_ETV7_SCCNNNGGSNNNGGAAGNNN|HOXB2_ETV7_TAATKNNNNGNNNNNNC)TTC|FOX(?:J3_TBX21_NNGYGNNNNNNNNWAACAACA|O1_ETV7_RWMAACAGGNNNNNNTTC)|(?:ETV7_TBX21_NSCGGAARNNNNNN?TC|HOXB13_(?:EOMES_NNMRTAAANTM|TBX3_NNNRTAAATC))ACA|ETV2_RFX5_NNNTTCCGSNNNNGCAA)C|POU2F1_EOMES_(?:ARGTGTNNNAATATKYNNNCRC|RGTGTNNNAATATK)|MYBL1_EOMES_NNSYGNCNAACNNNNNNCACRC|(?:GCM(?:1_(?:SPDEF_RTRSKGGCGGANNNNNN?ATCC|ETV7_NT(?:NNN|RNG)GGCGGAAGNNNTTCC)|2_EOMES_RTGCGGGNAGGTG)|TEAD4_(?:SPDEF_RGWATSCGGATGNNNNTCCK|HOXA13_RCATWCCNNNNNNTTTAY)|HOXD12_EOMES_NNNACGANNNNNNTCGT)N|E2F3_EOMES_NNGYGNNNNGGCGCSNNNNCRC|GCM2_(?:SOX15_(?:RTRCGGGNN|ATRCGGGY)NNNNNYWT|TBX21_NNNCGGGNNNGG)TGT|E(?:(?:TV2_TEF_TTACGTNNNNNNNNNC|LK1_SREBF2_RWCACGTGNN)CG|RF_HES7_NNCACGTGNNNNN?CCG)GAA|HOXD12_ELK3_NTTTAYNNCCGGAAR|MYBL1_ONECUT2_NAACGGNNATYGA|FOXJ2_ELF1_RMAGAAAACCGAA)N|TEAD4_PAX5_RCATWCCNNNNNNNNNNNNRWGCGTGAC|(?:(?:(?:TEAD4_RFX5_RCATTCNNNNNNNNNNNNNNNNN|HOXB2_RFX5_SYMATTANNNNNNR)|TEAD4_RFX5_RCATTCNNNNNNNNNNNNNNNN)|ETV2_RFX5_RNCGGAANNNNNNNNN)GCAAC|(?:E(?:2F1_NHLH1_SGCGCCNNNNNNNNNNNNCAG|(?:TV2_NHLH1_NCCGGAANNNNNNCAG|RF_FIGLA_RSCGGAANCAS))C|(?:HOXB2_NHLH1_NYMATTANNNNNNNC|HOXB2_NHLH1_NYMATTANNNNNN?C)AGC|RFX3_FIGLA_TRGYAACNNNNCASS)TGN|(?:(?:E(?:LK1_HOXA3_NCCGGWNNNNNNNNNNNSC|TV5_EVX1_RSCGGWAATNNNNN)|HOXB2_ETV7_NSCGGAARNNNNNN?M|HOXB2_PAX5_NNGTCACGCNNC|GCM2_DRGX_RTRSGGGNN?A)|GCM2_PITX1_RTRCGGGSG)ATTA|RFX3_(?:ETV7_NNNMGGAANNNNNTCCNNNRCAAC|BHLHA15_NRGYAACNNNCATATGK)|(?:ETV2_EOMES_RCCGGANNNNNNNNNNNACACC|TEAD4_DLX2_NRCATTCNNNNYAAT|HOXB2_ELF1_TAATKRNNNNGGAAG|MGA_EVX1_AGGTGNTAATKWNNNN|(?:(?:GCM1_EL(?:K3_R|F1_G)TGCGG|TEAD4_ELF1_GGAAT)G|MEIS1_ELF1_NTGC)CGGAAG|FOXO1_ELF1_RWMAACAGGAAG)T|(?:HOXB2_TBX21_NGGTGTGNNNNNTMATTWGC|E(?:TV5_CLOCK_NCACGTGNNNNNS|RF_FOXI1_TGTTKM)CGGAW|GCM2_E2F8_NTRYGGGNNNTGGCGGGA|TEAD4_ELK1_RMATWCCGGAW)R|ARNTL_BHLHA15_RKCACGTGNNNMCATATGK|(?:ETV2_ONECUT2_RCCGGAANNNNNNR|GCM2_ONECUT2_RTRCGGGNNNNNN)ATCRAT|(?:(?:T(?:EAD4_(?:(?:EOMES_RGGTGTNNNNNNNNGA|HOXB13_C(?:TCG|YAA)TAAA)AT|HES7_RCATTCCNN(?:NNN)?CRCGY|TCF3_NCAGGTGNGWAT)|FAP2C_ELK1_NGCCTNNGGSNNCGGAA)|GCM1_MAX_NNCACGTGNNNGCGG)G|MYBL1_FIGLA_NCASSTGNNNNNN?YAACSG|E(?:(?:(?:TV2_(?:(?:FIGLA_NNCAGGTGNNNNNM|DLX3_TAATTRNNNN)CGGAA|ONECUT2_(?:RRTCRATNN|NRTCRATA)NCGGAA)|TV2_TCF3_CASSTGNNCCGGAW)|TV2_NHLH1_NGCAGCTGCCGGAW)|RF_NHLH1_NNCAGCTGCCGGAW)R|HOXB13_TBX3_NNNRTAAANNTNACAC)Y|ETV2_ONECUT2_RCCGGAANNNNNN?ATCGAT|(?:HOXB2_EL(?:F1_N(?:NYMATTA|YMATTAN)NNNNNNN|K1_TAATKRCC)GGAA|GCM1_EL(?:K1_RKRNRGGCGGAAR|F1_NRCCCRNN)CGGAA|(?:GCM2_HES7_RTRNKGGTNNNG|ERF_HES7_NCCGGAANNNNNN)CACGY|RFX3_HES7_NRGCAACNNNCRCGY|GCM1_(?:TBX21_AGGTGTNRTRC|FOXI1_RTAAATAN)GG|MYBL1_MAX_NCACGTGNNYAACS)GN|ETV2_SOX15_RSCGGAWNNNNNNNACAATR|SOX6_TBX21_RRGTGTNNNNNNNNACAATR|(?:E2F3_ONECUT2_NNSGCGCSNNNN?ATCG|TEAD4_ONECUT2_RCATTCCNNATCG)AY|ETV2_HES7_RSCGGAANNNNNNNCACGTGN|E(?:TV2_RFX5_NACTTCCGGYNNNNGCAACS|2F(?:1_HES7_(?:SRCRCGYGS|RRCRCGYG)YNNNNSGCGCS|3_(?:TBX21_NGGTGTGNNNGGCGCS|FOXI1_NNMCACCGCGCCCM))|(?:TV2_SREBF2_RTCACGYSNCCGGA|RF_FOXI1_RSCGGATGTTK)W|RF_ETV7_NSMGGACGGAYNTCCKS)|ETV2_SOX15_RSCGGAWNNNNNNACAATR|ARNTL_PITX1_(?:NNCACGTGNNNNRGM|CACGTGNNNRGA)TTA|ETV2_HES7_RSCGGAANNNNNNCACGTGN|GCM2_SOX15_RTRCGGGNNNRNACAAW|POU2F1_SOX(?:15_NNNGMATAACAAWR|2_NATTTRCNNNACAAT)R|(?:(?:(?:TEAD4_ELK1_RCCGGANRNNCGGW|HOXB2_EOMES_RGGTGTTA)A|E2F3_DRGX_SGCGCTAAT)|PITX1_EOMES_GGATTANNARGTG)TK|ERF_SREBF2_NSCGGAARNCACGTGN)N_CAP_repr|TFAP2C_MAX_TNSCCNNNGGSNNNNNNNNNNNNNN?CACGTGN_CAP_repr|(?:GCM(?:1_(?:TBX21_RGGTGWKNNNNNNNNNTNNCR|FOXI1_(?:NTGTTG|RTMAAC)A)TRNG|2_TBX21_AGGTGTNNNGSG|1_ELF1_NNMGGAARTGCK)G|(?:E2F1_ELK1_SGCGCNNNNNNNNNNN|GCM1_ELK3_ACCCGCANC)CGGAA|RFX3_SRF_NRGYAACNNNNNCCTWWWNNG|E2F1_ELK1_SGCGCNNNNN(?:NNNNN)?CGGAA|ETV(?:2_SREBF2_RTMRCGTGA|5_DRGX_TAATKRS)CGGAW)GN_CAP_repr|(?:(?:E(?:(?:LK1_TBX21_RAGGTSRNNNNNNNNNNNNNNNNCGGAAG|TV2_FOXI1_NRTMAACMGGAAR)|RF_FOXI1_RTAAACMGGAAR)|F(?:OXO1_ELK1_RWYAACAGGAAG|LI1_FOXI1_RTAAACMGGAAR))Y|ETV5_E(?:OMES_RNGTGNNNNNNNNNNNNNRCRCCGGAW|TV7_NNGGAMGGATKTCCG)S|(?:ETV(?:2_TBX21_(?:RGTGTKRNNNNNNNNNNNCN|TMACA)CMGGAA|5_FOX(?:I1_(?:TGTTGNC|GTMAACA)|O1_RTMAACA)GGAW)|GCM1_FOXO1_(?:GTMAATAA|RTMAATAM)GGGY)R|(?:E(?:(?:(?:RF_TBX21_NRGTGTNANNNNNNNNN|TV5_HES7_NNCACGTG)NNNNCCGGAA|2F(?:1_EOMES_RGGTGTNNNGGCGSNNTNNCRS|3_FOXO6_NMATGACACNGCGCCM)|LK1_ETV7_NNSMGGACGGAYNTCCKS)|RF_EOMES_RRGTGTKNNNNNNNNNNNNNNCMGGAN)|(?:GCM(?:1_SPDEF_RTGNKGGCGGAWGNNNNN?TCC|2_FOXI1_RTAAATANG)G|E(?:2F3_HES7_NNNNGCGCSNNNNNCAC|TV2_FIGLA_NNCGGAANCAG)GT|TFAP4_ETV(?:1_RSCGGAANCAG|4_RCCGGAARCAS)ST)G|HOXB13_TBX21_ARGTGTKANTTTAT|HOXB2_PAX(?:1_NNGTCACGN|9_SGTCACGC)NTCATT|ETV5_TCF3_CASSTGNRNNGGAAG|F(?:OXO1_E(?:LF1_NTGTTGNC|TV4_RWMAACA)GGAAR|OX(?:J2_ELF1_NWAAACAGGAAG|O1_ELK1_TGTTGCCGGAN)|LI1_FOXI1_TGTTKMCGGAWR)|ERF_FOXO1_RTMAACAGGAAR)N|A(?:LX4_(?:TBX21_RGGTGNTAATNNNNNNNNNCASY|EOMES_NGYGYTAAYNNNNNNTNACAC)N|TF4_CEBP(?:D_NGATGATGCAATN|B_NNATGAYGCAAY))|(?:ETV2_TBX21_RCCGGANNNNNNNNNNNACACC|(?:HOXB2_EL(?:F1_TAATKRNNNNN|K3_TAATGNNNNNC)|GCM1_ETV1_RTRNNGGC)GGAAG|(?:GCM2_ELK1_NNRNGGGCGGAA|E(?:TV2_FOXI1_T|LK1_FOXI1_W)GTTKMCGGAW)R|FOXO1_(?:ELK(?:3_RTMAACAGGAAG|1_RSCGGATGTTR)|FLI1_RTMAACAGGAAG))T|E2F3_TBX21_NGGTGTGNNGGCGCSNNNNCRM|(?:(?:GCM1_CEBPB_MTRSGGGNNNNNN?|TEAD4_CEBPD_RGWATGYNN)TTRCGY|E(?:LK1_(?:HOXB13_RNCGGAANYNRTW|TEF_NSCGGAWNTTACGT)|TV(?:5_CEBPD_NSCGGAN|2_TEF_RSCGGAW)NTTRCGY|RF_CEBPD_RSMGGAANTTGCGY)|(?:HOX(?:D12_E(?:LK(?:1_RSCGGAAGTAA|3_RSCGGAAGT(?:AA|CG))|TV(?:1_RSCGGAAGT(?:AA|NG)|4_RSCGGAAGT(?:AA|CG)))|B13_ELK1_RSMGGAARTNN)|GCM1_HOXB13_RT(?:GCGGGTAA|RNGGGTNN))TA|ETV2_HOXB13_NCCGGAAGTYRTA)AA|(?:ERF_ONECUT2_RSCGGAANNNNNNRTCG|ATF4_TEF_RNMTGATGCA)AT|GCM2_SOX15_RTRCGGGNNNNRNACAAW|(?:ETV(?:2_PITX1_RSCGGAANNNNNGGM|5_EVX1_RSCGGWAATNNNNA)TT|ETV2_FOXI1_RSCGGAANNRYMAAC|ETV2_EVX1_RSCGGWAATNNNYATT|HOXB2_ETV4_ACCGGAAATG)A|TEAD4_DLX2_NRCATTCNNNNNTAATTR|ELK1_SPDEF_NSMGGACGGAYNTCCKS|F(?:LI1_(?:D(?:LX2_RSCGGAANNNNNYA|RGX_NNCGGAWGYM)ATTA|CEBP[BD]_RNCGGANNTTGCGCAA|ETV7_NSMGGACGGAYNTCCKS)|OX(?:J2_HOXB13_RTAAACAYNRTAAA|(?:J3_ELF1_NNARAAAACCGAAWM|O1_ETV[14]_RCCGGAWGTKK)))|ETV2_ETV7_NSMGGACGGAYNTCCKS|POU2F1_SOX2_ATTTGCATNACAATR|TEAD4_SPDEF_RGAATGCGGAT|ETV(?:5_(?:FOXO1_RNCGGATGTTK|EOMES_TNRCACCGGA)|2_FOXO6_RCCGGATGTTK)W|(?:GCM1_ERG_RTRYGGGCGGAAR|TEAD4_DRGX_RGWATGYTAAT|HOXB2_TBX3_AGGTGTTAAT)K|ELK1_FOXI1_RSCGGATGTKK)N_CAP|(?:(?:(?:(?:GCM1_MAX_(?:NNCACGTGNNNNNNNNNNRTGCGGGYR|RTGCGGGNNNNNNNCACGTG)|TEAD4_ELK1_RGAATSCGGAAGY)N|TEAD4_(?:HOXA2_RCATTCNNNNNNCATTA|FIGLA_GGAATKNNCASSTG|ERG_RSCGGAAATRCC))|ELK1_TBX21_TNRCACCGGAAGNN)_CAP_|POU2F1_(?:GSC2_NNGATTANNNATGCAWNN|ELK1_NCCGGATATGCA)N_CAP_)repr|C(?:LOCK_(?:FIGLA_NCASSTGKNNNNNNNNN?CACGTGN_CAP_repr|NHLH1_N(?:NCAGCTGN|RCAGCTG)NNNNNCACGTGNN_CAP_repr|(?:EVX1_(?:YRATTAN|TAATTA)NNNNNNCACGTG|EVX1_(?:ATRATYANNNNCACGTG|CACGTGNNNTAATKAT)|TBX3_GGTGTGNNNNNCACGTG)_CAP_repr|BHLHA15_NCACGTGNNNNNCATATGN_CAP)|(?:UX1_(?:NHLH1_NNCAGCTGNNNNNNNN(?:NATY|ATC)GAT|(?:(?:SRF_NCCATAYWNGGWN|(?:(?:FOXO1_GTMAACAN|PITX1_GGATTA)N|TBX21_NTCACACM))NNNATCR|HOXA13_NYMRTAAANATYG)AT)|EBPG_CREB3L1_NGCCACGCAAY)N_CAP_repr|UX1_(?:(?:(?:SOX15_NATCRATNNNNNNNN?AACAATRS|RFX5_RATCRATNNNNNNNNNN?RGYAAC|(?:HOXA13_ATCRATNNNNYCRTAA|TBX21_TMACACCYAAT)A)|SOX15_ATCRATNNNNNNNNSYATTGTT)|TBX3_AGGTGTGNNNNATCRAT)_CAP_repr|EBPG_ELF1_TTGCGYAANNSCGGAAGN_CAP_repr|(?:UX1_(?:FOX(?:I1|O6)_RTAAACANNNNNATCRAT|HOXB13_SYMRTAAANATYGAT)N|EBPG_ATF4_NNATGAYGCAAT)_CAP)|(?:(?:ELK1_EOMES_RGGTGNGANNNNNNNNTNNCACCGGAA|TEAD4_HES7_GGWATGYNNNNNNCRCGY|GCM1_MAX_CACGTGNNNGCGG)GY|P(?:OU2F1_TBX21_NGTGNNNNMATATKNNNACACC|ITX1_HOXA3_TAATKRNNNNGGATTA|(?:OU2F1_(?:EOMES|TBX21)_NTATKCAGYGTN|BX4_HOXA10_CCATAAATC)A)|(?:GCM1_FIGLA_CAGCTGNNNNNNN(?:N(?:N(?:NN)?TGCGG|TGCGG)|TGCGG)|HOXB2_PAX[59]_NNMATTAGTCACGCWTSRNT|(?:GCM2_FIGLA_RTRCGGGNNCASS|MEIS1_DLX3_TGACANSNTAAT)T)G|TEAD4_(?:CEBPD_NTTRCGYAAN|TBX21_ARGTGTKR)NNNNNRGWATGY|(?:ETV2_(?:CLOCK_NNCACGTGNNNNN|EOMES_TCACA)CCGGAWR|TEAD4_(?:EOMES_WNGTGYKAMATWC|FLI1_RCCGGAAATRS))Y|TEAD4_(?:CLOCK_NCACGTGNNNNNNNCATW|PITX1_RCATTCNNNNNTAAT|ETV4_RCCGGAAATR)CC|FLI1_ONECUT2_RSCGGAANNNNNNRTCGAT|(?:ETV(?:2_HOXA2_NCCGGAAGNNNNNNY|5_HOXA2_RNCGGAWGT)M|TEAD4_(?:HOXA3_RCATTC[NY]NNNNNC|DLX3_RCATTCCNNNY[AM])|(?:ETV2_DLX(?:3_RSCGGAANNNNNN?Y|2_RCCGGAANNNNNY)|TEAD4_DLX2_RCATTCYNNNN?C)A|HOXB2_TCF3_NCAGGTGNNNNNM|E(?:TV(?:5_D(?:LX2_RSCGGAANNNNN|RGX_RSMGGAWG)|2_DRGX_RSCGGAAN)|RF_DLX3_RSCGGAANNNNN)YA|FLI1_DLX2_RSCGGAARYA)ATTA|E(?:(?:LK1_PAX[19]_RSCGGAACYACGCWYSANT|TV5_HES7_CCGGAANNNNNNCACGT)G|TV5_HOXA2_RSCGGWAATKR|RF_TBX21_TMACACCGGAAG)|(?:ETV(?:2_PAX5_ACCGGANNTACGCNNNNNY|5_EVX1_RSCGGWAATK)|(?:(?:GCM1_(?:ONECUT2_RTGCGGGNNNTCGA|ETV4_RTGCGGGCGGAAG)|TEAD4_ELF1_RGAATGCGGAAG)|TEAD4_DRGX_GGAATGTTAAT)T|GCM2_DLX3_RTRCGGGNNNNNTAATK|TEAD4_DLX3_RCATTCCNNNNTAATK|TEAD4_DLX3_RCATTCNNNNNTAATK|GCM1_FOXI1_NNGTMAATANGGGY|HOXB2_TBX21_NAGGTGNTAATK|MGA_DLX(?:2_AGGTGNTAATT|3_AGGTGNTAATK))R|ETV2_SPDEF_NSCGGACGGAWATCCGSNT|(?:MEIS1_HOXA13_SYNRTAAANNTGTC|(?:HOX(?:D12_TBX21_YNRCACSTCG|C10_EOMES_TMACACYYMR)TW|ETV5_HOX(?:A13_NNCGGAWGTNR|B13_NNCGGANGNNN)TW)A|TEAD4_HOXB13_(?:GGWATGN|RGAATGC)NNRTAA|F(?:OXO1_HOXB13_GWMAACAYM|LI1_HOXB13_RSCGGAANYN)RTAA|GCM1_HOXA13_RKRNGGGNNATAA|HOXB2_(?:(?:EOMES|TBX21)_TAATKRGGTGYK|ETV1_ACCGGAAATG)|MGA_DLX2_SYAATTANWGGTGYG)A|(?:ERF_PITX1_NSCGGANNNNNN?GGM|HOXB2_EL(?:K[13]_RSCGGAAGTMR|F1_SMGGAAGTMR))TTA|F(?:OXO1_EL(?:F1_NNGAAAACCGAANM|K3_RCCGGAWGTKKW)|LI1_(?:TCF3_NCCGGANNCASSTG|FOXI1_RCCGGATGTTKW)Y)|TEAD4_HOXB13_NTCGTAAAATGC|ERF_EOMES_TNTCACACCGGAAAT|ETV2_FOXI1_RSCGGATGTTKW|TEAD4_ETV1_RSCGGAAATRCM|ALX4_TBX21_RGGTGYTAATWR)_CAP|(?:TEAD4_FIGLA_RATTCCNNNNNNNNNNCASS|HOXD12_FIGLA_SYMRTAAANNNNCASS|ETV5_TCF3_RNCGGAAGNNNNNCASS|MEIS1_SOX2_TGACAKNNNAACAA)TGN_CAP_repr|TFAP2C_MAX_TNSCCNNNGGSNNNN?CACGTGN_CAP_repr|(?:(?:(?:GCM1_MAX_(?:NNCACGTGNNNNNNNNNNRTGCGGGYR|RTGCGGGNNNNNNNCACGTG)|TEAD4_ELK1_RGAATSCGGAAGY)N|TEAD4_(?:HOXA2_RCATTCNNNNNNCATTA|FIGLA_GGAATKNNCASSTG|ERG_RSCGGAAATRCC))|ELK1_TBX21_TNRCACCGGAAGNN)_CAP|TEAD4_CLOCK_GGWATGNNNNNNN?CACGTGN_CAP_repr|(?:(?:TFAP4_MAX_NCAGCTGN|MEIS1_MAX_NTGACR)NNNNN|ERF_MAX_RSCGGAA)NCACGTGN_CAP_repr|ERF_DLX2_RSCGGAANNNNNYMATTA_CAP_repr_[12]|(?:(?:MEIS2_ONECUT2_NTGACAGNTAATCRATAN|HOXB13_ONECUT2_NNNRTAAAWATYGAYY|TFAP4_MAX_NCAGCTGNNNNNCACGTGN)|ELK1_HOXA1_RCCGGAAGTAATTA)_CAP|(?:E(?:LK1_FOXI1_RSCGGAANNRTMAAYA|2F3_TBX21_NGGTGTGNNGGCGCSN)_|GCM1_SPDEF_RTGNKGGCGGAWG_)CAP_repr|POU2F1_(?:GSC2_NNGATTANNNATGCAWNN|ELK1_NCCGGATATGCA)N_CAP|HOX(?:13_MEIS1_NNNRTAAANCTGTN|B13_Fox_NNMAACAYNRTAAA)_ChIP_Exo|(?:(?:MEIS2_ONECUT2_NTGACAGNTAATCRATAN|HOXB13_ONECUT2_NNNRTAAAWATYGAYY|TFAP4_MAX_NCAGCTGNNNNNCACGTGN)|ELK1_HOXA1_RCCGGAAGTAATTA)_HT|(?:(?:TFAP4_DLX3_NNCAGCTGNNNNNNNTAATT|(?:T(?:FAP4_FLI1_ACCGGAAACAGC|CF15_NACAYA)TG|HOX(?:A3_NSTA|D4_NNYM)ATTA)N|ETV7_NNGGAAGTGCTTCCN)N|(?:T(?:FAP4_DLX3_NNCAGCTGNNNNTAATK|BX3_AGGTGTN)|E(?:TV7_NNYTTCCGGGAARN|LF2_NA(?:MC|TG)CGGAAGT)|FOS_NGATGACGTCATC)R|(?:FLI1_HOXB13_NCCGGAANTNRTA|GATA1_AGAT)AAN|FLI1_DLX2_ACCGGAARTNNNYAATTA|MEIS2_HOXA13_CYCATAAANNTGTCA|NR1D2_TRGGTYASTAGGTCA|GLI3_NGACCACMCACGWNG|P(?:OU5F1_(?:NATATGCTAATKN|WATGCGCATW)|AX3_GTCACGCNNMATTAN)|NR1I2_RGTTCRNNNRGTTC|IRF2_NAANCGAAASYR|ET(?:V7_NNG|S2_RC)CGGAAGTG|FOXA1_TRNGTAAACA|HES1_GNCACGTGNC|MYCL2_SCACGTGS|HOXA(?:4_RT|6_SY|7_NY)MATTAN)_HT|ELK1_ONECUT2_RSCGGAASNGRTCGATA_HT|POU2F1_(?:SOX15_WTGMATAACAATR_CAP_[12]|ETV4_NCCGGATATGCAN_CAP_[12])|FLI1_BHLHA15_NCCGGAANCATATGN_CAP|(?:GCM1_ELK1_RTGCGG|TEAD4_SPIB_RGAAT)GCGGAAGTN_CAP_[12]|(?:TFAP4_FLI1_RSCGGAWRCASS|ETV5_FIGLA_RSCGGAARCAGG|FLI1_(?:FIGLA_RSCGGAANCASS|MAX_RSCGGAANCACG)|ETV5_FOXI1_RSCGGATGT)TGN_CAP|RORB_A(?:WNTAGGTCATGACCTANWT|ANTAGGTCAGTAGGTCA)_HT|(?:GCM(?:1_FOXI1_TGTTGANG|2_FOXI1_TGTTKATR)CGG|ELK1_EOMES_TNRCACCGGAA)GN_CAP|MGA_EVX1_AGGTGNTAATKW_CAP|(?:SOX(?:17_|6_C)ACCGAACAA|(?:BACH1_ATGAC|JUN_ATGACG)TCA)T_HT)$

Time output:
------------

  * Command: grex -c --file /dev/fd/63
  * Elapsed wall time: 0:13.25 = 13.25 seconds
  * Elapsed CPU time:
     - User: 11.69
     - Sys: 1.55
  * CPU usage: 99%
  * Context switching:
     - Voluntarily (e.g.: waiting for I/O operation): 1
     - Involuntarily (time slice expired): 106
  * Maximum resident set size (RSS: memory) (kiB): 6866384
  * Number of times the process was swapped out of main memory: 0
  * Filesystem:
     - # of inputs: 0
     - # of outputs: 40
  * Exit status: 0


tfdimers
^tfdimers__MD00(?:0(?:0[1-9]|2[013-9])|39[0-689]|46[0-79]|(?:0[13-9]|3[0-8]|4[0-57-9])[0-9]|[125][0-9][0-9]|60[0-3])$

Time output:
------------

  * Command: grex -c --file /dev/fd/63
  * Elapsed wall time: 0:00.00 = 0.00 seconds
  * Elapsed CPU time:
     - User: 0.00
     - Sys: 0.00
  * CPU usage: 100%
  * Context switching:
     - Voluntarily (e.g.: waiting for I/O operation): 1
     - Involuntarily (time slice expired): 0
  * Maximum resident set size (RSS: memory) (kiB): 5524
  * Number of times the process was swapped out of main memory: 0
  * Filesystem:
     - # of inputs: 0
     - # of outputs: 0
  * Exit status: 0


tiffin
^tiffin__TIFDMEM0000(?:0(?:(?:0[39]|34|40|79)|17)|107)$

Time output:
------------

  * Command: grex -c --file /dev/fd/63
  * Elapsed wall time: 0:00.00 = 0.00 seconds
  * Elapsed CPU time:
     - User: 0.00
     - Sys: 0.00
  * CPU usage: 100%
  * Context switching:
     - Voluntarily (e.g.: waiting for I/O operation): 1
     - Involuntarily (time slice expired): 0
  * Maximum resident set size (RSS: memory) (kiB): 3216
  * Number of times the process was swapped out of main memory: 0
  * Filesystem:
     - # of inputs: 0
     - # of outputs: 0
  * Exit status: 0


transfac_pro
^transfac_pro__M0(?:0(?:(?:3(?:0[38]|2[125-9]|3[2389]|6[6-9]|7[015])|4(?:0[0135-7]|4[0-247]|8[129])|51[1348]|6(?:1[69]|2[1-469]|3[0-2489]|4[016-9]|5[0258]|7[1289]|87)|7(?:1[2367]|2[1246-9]|4[02-4679])|9(?:1[235-9]|3[0-35689]|4[0-35-79]))|99[1-37-9])|1(?:0(?:0[0-479]|2[02389]|5[147-9]|7[02358])|1(?:2[2-57]|3[1-37-9]|4[25-9]|5[0-4]|7[1-357]|8[1-35-7])|2(?:1[124679]|2[0347-9]|8[12478])|5(?:0[467]|2[46-8]|4[389]|5[3-58]|7[02457]|8[06-9])|6(?:2[4-6]|3[01]|4[0156]|6[0-256]|7[35]|9[24-69])|31[2-9]|08[1-4689]|04[2-579]|7(?:0[2-9]|1[1-4689]|2[1-58]|3[2-579]|4[2-479]|5[29]|8[238]|9[346-8])|8(?:0[1689]|1[0467]|3[014-8]|4[134]|8[2-689]|9[04-6])|82[0-36]|9(?:0[246]|1[0159]|3[079]|5[2-6]|6[16-9]|9[0-36]))|073[1346-9]|0(?:53|82)1|116[02-57-9]|129[2457-9]|075[0-24]|2(?:0(?:0[02469]|3[1346-9]|4[0-58])|191|2(?:2[04]|4[126]|5[029]|6[1-35-9]|7[0-389])|7(?:4[02-57-9]|5[0236-9])|80[1-47-9]|9(?:1[02-579]|2[2457-9]|4[0-24]))|(?:076|197)[1-79]|295[89]|(?:095|281)[013-79]|237[0-24-8]|3(?:1(?:2[13-57-9]|3[03-57-9])|57[1-79]|53[89]|7(?:8[89]|9[013-79])|8(?:0[2-79]|5[0-24-8]|6[025-9]))|101[0-4679]|177[024689]|388[0-4689]|069[13-689]|156[489]|4(?:59[45]|6(?:1[0134679]|2[2-7]|3[1-35689]|7[0-289]|8[0-579])|7(?:2[0-4679]|3[12457-9]|5[024689]|6[013-5]|7[014-6]|9[04579])|70[2-46-8]|71[013-689]|8(?:0[2-46-8]|2[2-469]|3[1-379]|4[013-689]|5[03-689]|6[0-4689]|7[03579]|8[0136-9]|9[0-35-8])|9(?:0[13-689]|1[023568]|3[0-57]|4[489]|5[0359]|6[067]))|5(?:19[5-7]|2(?:0[0-359]|1[23679]|2[0-249]|3[34689]|4[146-9]|5[07]|6[0158]|9[57-9])|3(?:0[01346-9]|6[0-68]|7[0-469])|62[024-9])|315[0-5]|69(?:6[2-46-9]|9[0-5])|09[68][0-7]|(?:202|314)[1-8]|(?:111|287|466)[1-46-9]|(?:1(?:10|24)|561|683)[0-57-9]|2(?:88|93)[013-57-9]|(?:109|478)[0-2457-9]|(?:079|147|2(?:[13]1|85)|443|54[46]|6(?:78|84))[0-79]|120[0-478]|(?:1(?:76|94)|2(?:[14]8|96))8|049[2-4]|279[014-9]|276[0-47-9]|(?:2(?:08|10|32|86)|541|629)[0-24-9]|(?:097|3(?:55|84)|464|657)[1-9]|(?:2(?:33|90)|626)[02-9]|(?:1(?:[02]6|44)|5(?:42|69)|6(?:16|22))[0-46-9]|7(?:06[0-7]|1(?:1[1-8]|3[1-46-9]|4[0-57-9]|5[378]|6[02378]|7[0348])|2(?:7[05-8]|9[0-246-9])|3(?:3[1257-9]|4[013-57-9]|6[0-578]|9[0-2457-9])|(?:28|31)[0-79]|4(?:[13][0-79]|6[014-79]|7[4-79]|8[0-478])|5(?:68|7[2-4]|9[0379])|26[014-9]|6(?:1[0-24578]|2[7-9]|7[014-9])|7(?:1[0-47-9]|4[0-69]|5[013-589])|(?:3[07]|42)[0-24-9]|20[04-9]|8(?:4[0-24-9]|5[0-59]|6[1-9]|7[04-9])|9(?:1[0-379]|2[013479]|3[02-9]|4[02-47-9]|7[0-25-9]|[69][0-46-9]))|457[0-3]|(?:031|2(?:16|47)|511|719)2|161[0569]|(?:1(?:25|38)|543|6(?:13|95)|732)[0-35-9]|740[02-79]|(?:103|492)[1-7]|070[1467]|(?:185|703)[4-9]|766[0-36-9]|724[26-9]|042[5-8]|738[024-8]|153[2-46]|(?:119|273|707)[5-9]|8(?:0(?:2[0478]|3[259]|5[0-589]|6[13]|7[569]|8[0-3]|9[069])|1(?:0[4589]|1[16]|42|5[0569]|8[03-79]|9[0-24589])|2(?:0[0-35-9]|1[3-6]|2[02-79]|3[1-35-79]|4[1-7]|5[1-369]|6[1467]|7[013-58]|8[1-59])|3(?:0[2-468]|1[02-689]|2[023689]|3[01347-9]|4[124-6]|5[023589]|6[1479]|7[1457-9]|8[0-3579]|9[02-589])|4(?:0[124-689]|1[1-589]|2[3-79]|3[4-9]|4[0-6]|5[1357-9]|6[15-9]|7[0-37]|8[0-36-9]|9[13-58])|5(?:0[015-9]|1[0-24-689]|2[0135-79]|3[2479]|4[01579]|5[6-8]|6[26-9]|7[0145]|8[3-7])|6(?:0[025689]|1[0689]|2[346]|3[02578]|4[15-79]|5[046]|6[0247]|7[14-8]|8[0235]|9[0-246])|7(?:0[02458]|1[01389]|2[5-8]|3[03-59]|4[01346]|5[125-79]|6[03-8]|8[024-8]|9[2-46])|01[5-9]|8(?:0[0-3569]|1[136-9]|2[024-689]|3[1568]|6[5-9]))|(?:034|358|718|859)[0-2]|465[39]|(?:046|321)6|192[34]|043[0-26]|(?:092|889)[0-24-79]|528[03]|(?:238|5(?:08|27))3|(?:0(?:39|47|78)|221|311)9|(?:080|1(?:3[23679]|4[0-3568]|59|65|87|98)|2(?:0[15-79]|29|3[045]|78|8[349])|3(?:5[46]|8[239])|4(?:1[0-24-9]|4[0-246-9]|5[0-6]|69)|5(?:3[1-489]|4[057-9]|5[0-46-9]|6[03-8])|6(?:1[0-24579]|2[13-578]|5[0-689]|7[0-79]|8[25-9]|9[0-2])|7(?:0[4589]|1[02]|2[1-35]|45|6[03-589]|7[023689]|8[0-389]|9[05])|(?:39|4[023]|5[7-9]|6[0346])[0-9]|8(?:87|9[0-9]))[0-9]|(?:066|515)5|(?:081|1(?:51|60)|309|752|884)0|(?:751|812)4|306[47]|149[48]|(?:127|829)[02359]|804[1-36-9]|474[13-9]|(?:123|2(?:28|36)|4(?:45|81)|694)[013-9]|(?:077|13[05]|282|387|413|5[35]5|680|735|888)[0-8]|(?:1(?:34|86)|277|381|6(?:18|20|81|9[378])|7(?:77|98)|8(?:00|77))[0-689]|744[78]|9(?:0(?:1[0-2]|3[39]|46|5[34]|6[35689]|7[0-24679]|8[1-47]|[29][0-26])|1(?:0[3-57]|1[679]|2[0-24-79]|3[03]|6[17-9]|73|8[79]|9[1-4])|00[0-9]|2(?:29|3[0-9]|55|6[2-69]|[47]0|84|9[3-5])|3(?:0[05]|1[47])|4(?:0[48]|1[02359]|5[35-8]|6[1-36-9]|7[2569]|8[13-9]|9[0-35-7])|5(?:0[0679]|1[013-9]|2[0-8]|3[0-689]|4[0146]|6[0-28]|7[78]|8[056])))$

Time output:
------------

  * Command: grex -c --file /dev/fd/63
  * Elapsed wall time: 0:00.15 = 0.15 seconds
  * Elapsed CPU time:
     - User: 0.14
     - Sys: 0.01
  * CPU usage: 99%
  * Context switching:
     - Voluntarily (e.g.: waiting for I/O operation): 7
     - Involuntarily (time slice expired): 0
  * Maximum resident set size (RSS: memory) (kiB): 43884
  * Number of times the process was swapped out of main memory: 0
  * Filesystem:
     - # of inputs: 0
     - # of outputs: 8
  * Exit status: 0


transfac_public
^transfac_public__M00(?:0(?:(?:(?:0[124-8]|1[1-46-9]|2[1-68]|4[0-5]|6[0-35689]|9[04-9])|7[0-9])|3[2-9])|1(?:0[2-689]|4[013-8]|5[0-25-9]|[1-36][0-9]|7[02-9]|8[2-9]|9[0-69])|2(?:0[13-689]|1[05-7]|2[0-58]|3[1-79]|5[0-24-9]|6[0-246-9]|7[0-26-9]|8[01457-9])|3(?:02|4[6-9]|5[01689]|6[02]|7[378]|9[2-68])|(?:05|24)[0-689]|29[0-4]|08[0-8]|4(?:1[0-689]|2[0-4]|3[357]|4[689]|5[013-79]|6[0-57-9]|7[0-8]|8[03-7]|9[015-9])|380|5(?:00|1[025-7]|2[68]|3[289])|615)$

Time output:
------------

  * Command: grex -c --file /dev/fd/63
  * Elapsed wall time: 0:00.01 = 0.01 seconds
  * Elapsed CPU time:
     - User: 0.01
     - Sys: 0.00
  * CPU usage: 100%
  * Context switching:
     - Voluntarily (e.g.: waiting for I/O operation): 1
     - Involuntarily (time slice expired): 0
  * Maximum resident set size (RSS: memory) (kiB): 5076
  * Number of times the process was swapped out of main memory: 0
  * Filesystem:
     - # of inputs: 0
     - # of outputs: 8
  * Exit status: 0


yetfasco
^yetfasco__(?:MATALPHA1\-MCM1\-dimer_1442|TBP\-TFII(?:A(?:\-TFIIB_1330|_1328)|B_1329)|Y(?:BR089C\-A_79|F(?:R034C_222|L021W_96)|IL131C_200|LR131C_133|(?:ER051W_6|DR096W_5)6|KR099W_40)2|Y(?:(?:(?:B(?:L103C_144|R083W_81)|GL073W_61|IL036W_58)|KR034W_135)5|(?:ER(?:028C_214|130C_53)|BR182C_86)4|(?:ER064C_20|GL096W_4)94|ML081W_2194|(?:ER069W_142|FL044C_116|MR075W_106|ML113W_141|GL073W_47|LR176C_49|NL(?:027W_51|139C_78))6|(?:GL073W_(?:146|41)|DR266C_116|IL056W_209|NL167C_140|MR043W_83)1|P(?:L177C_21|R186C_13)21|(?:PR086W_132|ER169W_54|CL055W_12)7|(?:EL009C_136|GL209W_214|MR042W_148|PR104C_220)3|JL(?:056C_2097|110C_2133)|ER068W_556|OR380W_756|(?:LR403W_7|OR344C_3)97)|Y(?:CR040W_141|LR176C_147|(?:DR423C_20|ER148W_7)9|KL062W_51|ML027W_49|ER045C_)8|Y(?:GL192W_100|DR477W_111|MR037C_138|BL103C_87|CR065W_57)0|Y(?:ML065W_154|ER040W_53|BR267W_48|DR(?:146C_56|259C_59)|OR028C_40|P(?:L089C_41|R052C_87)|GL254W_6)9|YGL035C_2142|YNL068C_830)$

Time output:
------------

  * Command: grex -c --file /dev/fd/63
  * Elapsed wall time: 0:00.06 = 0.06 seconds
  * Elapsed CPU time:
     - User: 0.06
     - Sys: 0.00
  * CPU usage: 98%
  * Context switching:
     - Voluntarily (e.g.: waiting for I/O operation): 1
     - Involuntarily (time slice expired): 1
  * Maximum resident set size (RSS: memory) (kiB): 31096
  * Number of times the process was swapped out of main memory: 0
  * Filesystem:
     - # of inputs: 0
     - # of outputs: 0
  * Exit status: 0

Very slow for large number of lines

Hi! 👋🏻 I thought this may be useful. I came across grex looking at Rust tools and thought I'd try it on an old problem. I'm not planning to use it for anything currently, but I thought this report might be useful.

A file with 3622 lines takes frak (clojure) ~100ms to produce a regex.

Grex takes around 50 seconds on the same list:

grex --file names.txt  49.84s user 14.48s system 89% cpu 1:12.25 total

Here's names.txt:

https://gist.github.com/bbugh/4bf9df86931a94f89e61b3b3896d4e62

Problem with common substring detection

There is a bug in the common substring detection algorithm causing union operations to be applied where optionality expressions would be more appropriate. The resulting regex is not incorrect but more complex than necessary. Examples:

Test Cases Expected Actual
ac abc ^ab?c$ ^a(bc|c)$
abc abxyc ^ab(xy)?c$ ^ab(xyc|c)$

Feature Request: Allow to pipe text into grex

I'd like to be able to pipe text into grex.

For example

echo "hello world 543" | grex -g

Would it be possible to support this feature?

My use case would be that I could select the text in visual mode and pipe it through grex to get back a regex in place that I can further edit in the buffer.

I use vis as my main editor which has <, >, |, and ! operators in command mode.

Allow to provide test cases that must not be matched

Currently, only test cases that must be matched by the generated regular expression can be provided. It would be useful to additionally provide test cases that must not be matched by the generated expression. In combination with shorthand character classes this would allow for more specific and versatile regular expressions.

Nondeterministic results for --convert-repetitions

$ git describe
v0.3.1
$ ./target/debug/grex -r "AAAAAA"
^A{6}$
$ ./target/debug/grex -r "AAAAAA"
thread 'main' panicked at 'assertion failed: end <= len', <::core::macros::panic macros>:3:10
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
$ ./target/debug/grex -r "AAAAAA"
thread 'main' panicked at 'assertion failed: end <= len', <::core::macros::panic macros>:3:10
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
$ ./target/debug/grex -r "AAAAAA"
^A{6}$
$ ./target/debug/grex -r "AAAAAA"
^(AA){4}A$
$ ./target/debug/grex -r "AAAAAA"
^(AAA){2}$
backtrace for reference

⋊> ~/_/_/grex $ ./target/debug/grex -r "AAAAAA"
thread 'main' panicked at 'assertion failed: end <= len', <::core::macros::panic macros>:3:10
stack backtrace:
   0: backtrace::backtrace::libunwind::trace
             at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.40/src/backtrace/libunwind.rs:88
   1: backtrace::backtrace::trace_unsynchronized
             at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.40/src/backtrace/mod.rs:66
   2: std::sys_common::backtrace::_print_fmt
             at src/libstd/sys_common/backtrace.rs:77
   3: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt
             at src/libstd/sys_common/backtrace.rs:59
   4: core::fmt::write
             at src/libcore/fmt/mod.rs:1057
   5: std::io::Write::write_fmt
             at src/libstd/io/mod.rs:1426
   6: std::sys_common::backtrace::_print
             at src/libstd/sys_common/backtrace.rs:62
   7: std::sys_common::backtrace::print
             at src/libstd/sys_common/backtrace.rs:49
   8: std::panicking::default_hook::{{closure}}
             at src/libstd/panicking.rs:195
   9: std::panicking::default_hook
             at src/libstd/panicking.rs:215
  10: std::panicking::rust_panic_with_hook
             at src/libstd/panicking.rs:472
  11: rust_begin_unwind
             at src/libstd/panicking.rs:376
  12: core::panicking::panic_fmt
             at src/libcore/panicking.rs:84
  13: core::panicking::panic
             at src/libcore/panicking.rs:51
  14: alloc::vec::Vec<T>::drain
             at ./<::core::macros::panic macros>:2
  15: alloc::vec::Vec<T>::splice
             at /rustc/a9c1c04e986dbf610be8cbe6a8107f90b4db61ce/src/liballoc/vec.rs:2180
  16: grex::grapheme::GraphemeCluster::replace_graphemes_with_repetitions
             at src/grapheme.rs:204
  17: grex::grapheme::GraphemeCluster::convert_repetitions
             at src/grapheme.rs:53
  18: grex::regexp::RegExp::grapheme_clusters
             at src/regexp.rs:123
  19: grex::regexp::RegExp::from
             at src/regexp.rs:93
  20: grex::regexp::RegExpBuilder::build
             at src/regexp.rs:69
  21: grex::handle_input
             at src/main.rs:109
  22: grex::main
             at src/main.rs:77
  23: std::rt::lang_start::{{closure}}
             at /rustc/a9c1c04e986dbf610be8cbe6a8107f90b4db61ce/src/libstd/rt.rs:67
  24: std::rt::lang_start_internal::{{closure}}
             at src/libstd/rt.rs:52
  25: std::panicking::try::do_call
             at src/libstd/panicking.rs:296
  26: __rust_maybe_catch_panic
             at src/libpanic_unwind/lib.rs:79
  27: std::panicking::try
             at src/libstd/panicking.rs:272
  28: std::panic::catch_unwind
             at src/libstd/panic.rs:394
  29: std::rt::lang_start_internal
             at src/libstd/rt.rs:51
  30: std::rt::lang_start
             at /rustc/a9c1c04e986dbf610be8cbe6a8107f90b4db61ce/src/libstd/rt.rs:67
  31: main
  32: __libc_start_main
             at ../csu/libc-start.c:308
  33: _start
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

It looks like the behavior is caused by unstable output of GraphemeCluster::sort_repetitions, but the input seems wrong as well ("AA" * 4 != "AAAAAA"[0..5]):

[src/grapheme.rs:154] &sorted_repetitions = [
    Some((["A", "A", "A"], 0..6, 2)),
    Some((["A", "A"], 0..5, 4)),
    Some((["A"], 0..6, 6)),
]

Add Python bindings

I think it would be useful to have Python bindings for the library part of grex so that the generated regular expressions can be used within Python's regular expression module.

This is a bit tricky, however, because there are differences between Rust's and Python's regex engines with regard to what is matched by \w, for instance. So implementing this might take some significant time in the worst case.

Deprecate enum `Feature` in favor of additional methods in `RegExpBuilder`

In retrospect, the part of the library API which uses the enum Feature feels kind of clumsy. For the next release, I will deprecate this enum and all methods using it. I will introduce additional builder methods in the RegExpBuilder instead which makes the API more consistent and easier to use overall.

Much slower than Regexp::Assemble

Thanks for grex! I love to see tools in this space.

Historically, I've used Regexp::Assemble for this kind of work, either via the full perl script, regexp-assemble, or via my own custom perl code that leveraged it.

The regexp-assemble script / module is available via CPAN, https://metacpan.org/pod/Regexp::Assemble, or via the package libregexp-assemble-perl on Ubuntu (not sure about other distributions).

I found it fairly straightforward to make a somewhat pathological case. I used pwgen to make 100 random strings, 80 characters long, and spat them out to a file pwgen 80 100 > testcase, then ran it through multitime with it doing 5 attempts and reporting back.

This represents a similar-ish way I've used regexp-assemble in the past, feeding in a stream of unique request IDs to produce a combined regex to then use searching large log files, though I've not needed to do that for a while.

Feel free to disregard this issue if this doesn't meet your goals for grex.

regexp-assemble:

            Mean        Std.Dev.    Min         Median      Max
real        0.072       0.014       0.051       0.070       0.096       
user        0.058       0.011       0.046       0.062       0.075       
sys         0.015       0.010       0.005       0.008       0.030       

grex:

            Mean        Std.Dev.    Min         Median      Max
real        16.872      0.171       16.699      16.853      17.190      
user        14.745      0.178       14.541      14.745      15.062      
sys         2.125       0.019       2.104       2.126       2.157       

Performance of the actual regexes spat out the other side are variable. Some of the test cases I made from real world data, regexp-assemble produced faster regexes, for others grex did.

Not sure if regexp-assemble might give you some interesting prior art to dig in to from a performance perspective.

Property testing

There's three main properties that can be tested, and they should help catch bugs more easily:

  • For any set of input strings, the output string should be a syntactically valid regex (according to which syntax? For now I assumed the regex crate's). (PR: #4)
  • For any set of input strings, the output string when compiled as a regex (under which engine) should match every input string (PR: #7).
  • For any set of input strings, and any set of other strings disjoint from the first, the output string (when compiled as a regex) should not match any of the non-input strings (PR: #8).

These are reasonably easy to write as property tests, and together should cover the entire contract of this 1-function library.

Input starting with a hyphen results in an error

As title says:

% grex "- Input starting with a hyphen" 
error: Found argument '- ' which wasn't expected, or isn't valid in this context

USAGE:
    grex [FLAGS] <INPUT>... --file <FILE>

For more information try --help

Add feature for specifying lower bound for repetition conversion

Optimizing repetitions with less than four characters doesn't make sense – we get larger regular expressions in the output

Bad optimization
input: zoom - four characters
output: zo{2}m - six characters

Bad optimization
input: zooom - five characters
output: zo{3}m - six characters

Not bad
input: zoooom - six characters
output: zo{4}m - six characters

Good optimization
input: zooooom - seven characters
output: zo{5}m - six characters

Document how to use grex in shell filters

Added documentation suggestion:
It is quite handy to filter inputs to grex through tools such as head, tail, cat, and grep for a variety of use cases:

  1. to produce simpler regexps for sanity checking grex outputs.
  2. generating separate simpler regexp for subsets of your data (e.g. headers versus data).
  3. generate separate simpler regexp for errors or anomalies using grep's -v, --invert-match options
    On Linux reading from standard input can be achieved with the nonstandard option --file /dev/stdin

Improve command-line tool by adding STDIN support

I noticed that I can't use STDIN.

→ cat groups  | grex --file -
error: the specified file could not be found

Will it be possible to add in a future release?

To work around this I use xargs:
cat za.groups | xargs grex

Grex hash for v1.2.0 release fails to verify in scoop

Simple as that:

λ scoop install grex
Installing 'grex' (1.2.0) [64bit]
grex-v1.2.0-x86_64-pc-windows-msvc.zip (792,6 KB) [==========================================================================================================================] 100%
Checking hash of grex-v1.2.0-x86_64-pc-windows-msvc.zip ... ERROR Hash check failed!
App:         main/grex
URL:         https://github.com/pemistahl/grex/releases/download/v1.2.0/grex-v1.2.0-x86_64-pc-windows-msvc.zip
First bytes: 50 4B 03 04 14 00 00 00
Expected:    d075efdbccb01c8b093b6c5120d064cc5ead534dec483c1a3d43cc4543d940ea
Actual:      da9c50a4e19cbf7b1c4a001a9252c1a097b8eebbb9ec0bbf3f88bc79030e7d73

Creating issue as this may be an overlooked thing.
Another option is that I'm facing MIM attack which would be worse case scenario ;)

warning: unused return value of `std::mem::replace` that must be used

When I compile grex with rust 1.44.1 on nix I get the following warning:

warning: unused return value of `std::mem::replace` that must be used
  --> src/regexp/regexp.rs:47:9
   |
47 | /         std::mem::replace(
48 | |             test_cases,
49 | |             test_cases.iter().map(|it| it.to_lowercase()).collect_vec(),
50 | |         );
   | |__________^
   |
   = note: `#[warn(unused_must_use)]` on by default
   = note: if you don't need the old value, you can just assign the new value directly

warning: 1 warning emitted

Generate BRE and ERE regex

Currently grex appears to generate PCRE but is it possible to also have a flag which enables generation of POSIX BRE and ERE?

Overly complex regex with input containing several common parts

While building a regex for the various possible formats of Creative Commons' Public Domain Mark (to assist in spdx/license-list-XML#988), I noticed that grex produces a more complex regex than what the input requires.

Here's what I provided:

grex \
  "This work is free of known copyright restrictions." \
  "This work (WWW) is free of known copyright restrictions." \
  "This work (by AAA) is free of known copyright restrictions." \
  "This work, identified by CCC, is free of known copyright restrictions." \
  "This work (WWW, by AAA) is free of known copyright restrictions." \
  "This work (WWW), identified by CCC, is free of known copyright restrictions." \
  "This work (WWW, by AAA), identified by CCC, is free of known copyright restrictions." \
  "This work (by AAA), identified by CCC, is free of known copyright restrictions."

The result was (after manually making groups non-capturing):

^This work(?:(?: \((?:(?:WWW, b|b)y AAA|WWW)\),|,) identified by CCC, |(?: \((?:(?:WWW, b|b)y AAA|WWW)\) | ))is free of known copyright restrictions\.$

Visualized as a Debuggex diagram:

Screenshot 2020-03-10 at 14 20 39

A regex produced by hand to match the same input shows that this could be simplified:

^This work(?: \((?:WWW(?:, by AAA)?|by AAA)\))?(?:, identified by CCC,)? is free of known copyright restrictions\.$

Debuggex diagram:

Screenshot 2020-03-10 at 12 22 50

usage error

I get this error after I run grex on mac os 11.6.1

error: The following required arguments were not provided:
    <INPUT>...
    --file <FILE>

Inserting a character breaks repetition detection (sometimes)

I have been looking for a way to find repeated substrings. I think I can parse grex results to find repetitions, and given that my strings are rather short, I could then compare group contents to find non-contiguous repetitions.

I did some quick tests and I may have chanced upon a problem:

  • grex -dsr -c 'heeelooo world lalala lalala foo foo xalxalxal xalxalxal'

    gives ^he{3}lo{3}\sworld(?:\s(?:la){3}){2}(?:\sfo{2}){2}(?:\s(?:xal){3}){2}$

  • grex -dsr -c 'heeelooo world lalala lalala foo foo xalxalxal i xalxalxal'

    gives ^he{3}lo{3}\sworld\s(?:(?:la){3}\s){2}(?:fo{2}\s){2}(?:xal){3}\si\s(?:xal){3}$

  • grex -dsr -c 'heeelooo world lalala k lalala foo foo xalxalxal i xalxalxal'

    gives ^he{3}lo{3}\sworld\slalala\sk\slalala\s(?:fo{2}\s){2}(?:xal){3}\si\s(?:xal){3}$

In the last probe, neither of the two lalala was detected as repetitious when a k was inserted, although xalxalxal was treated as expected. Any thoughts?

Character escaping gets confused when the input string contains a unicode-escape symbol itself.

Examples found by the code in #4:

  • "\u{70f}["
  • "\u{110cd}("

These are all passed through as-is but that's not valid.

Worth noting that "\u{110cd}" and similar get passed through as well, which is a syntactically valid regex but will not match the input string. Nope, that was just me misunderstanding how unicode escapes work.

  • \u{600}* also is passed through as is, which is syntactically valid but will not match itself.

Any idea how to better do classes?

This sounded like just the tool I needed to get the job done, and it may be, but perhaps I'm just not using it correctly.

The use-case here is that I have a file with almost 2 million filenames in it. Over the years, there have been several different file naming conventions, and I'm trying to determine how many of each there are (the easy way, of course).

At any rate, given something like this: _001715_1406309_.pdf I get:

$ grex _001715_1406309_.pdf
^_001715_1406309_\.pdf$
$ grex -r _001715_1406309_.pdf
^_0{2}1715_1406309_\.pdf$

I was hoping I could generate regex patterns which are more inclusive, using classes, such as:

^_[0-9]*_[0-9]_\.pdf$

The -r option looked promising, but it just looks for characters which repeat exactly, not characters which would match some obvious character classes such as [:alpha:], [:digit:], etc.

Ideally it would be configurable so that I could get:

^_[0-9]*_[0-9]_\.pdf$

instead of something like these:

^_[0-9]*_[0-9]_\.[a-z]*$
^_[0-9]{6}_[0-9]{7}_\.[a-z]{3}$

Dunno, just riffing out loud. Interesting tool, though :)

Hope that makes sense. Any ideas or suggestions for using grex or anything else to get the job done? Thanks!

Update to Unicode Standard 13.0

Not to forget later on for the release notes: The internally used Unicode Standard has been updated to the most current version 13.0 (commit 692db54) which is now also used by the regex crate 1.3.5 and higher.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.