Class UserSearchUtils
- java.lang.Object
-
- ghidra.util.UserSearchUtils
-
public class UserSearchUtils extends java.lang.Object
This class converts user inputted strings and createsPattern
s from them that can be used to createMatcher
objects. Some methods create patterns that are meant to be used withMatcher.matches()
, while others create patterns meant to be used withMatcher.find()
. Please see each method javadoc for clarification.Note: methods in the class will escape regex characters, which means that normal regex queries will not work, but will be instead interpreted as literal string searches.
-
-
Field Summary
Fields Modifier and Type Field Description static java.util.regex.Pattern
NON_GLOB_BACKSLASH_PATTERN
A pattern that will find all '\' chars that are not followed by '*', '?' or another '\'static java.lang.String
STAR
Wildcard string for matching 0 or more characters.
-
Constructor Summary
Constructors Constructor Description UserSearchUtils()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static java.util.regex.Pattern
createContainsPattern(java.lang.String input, boolean allowGlobbing, int options)
Creates a regular expression Pattern that will match all strings that contain the given input string.static java.util.regex.Pattern
createEndsWithPattern(java.lang.String input, boolean allowGlobbing, int options)
Creates a regular expression Pattern that will match all strings that end with the given input string.static java.util.regex.Pattern
createLiteralSearchPattern(java.lang.String text)
Generate a compiled representation of a regular expression, ignoring regex special characters .static java.util.regex.Pattern
createPattern(java.lang.String input, boolean allowGlobbing, int options)
Creates a regular expression Pattern that will match all strings that match exactly the given input string.static java.lang.String
createPatternString(java.lang.String input, boolean allowGlobbing)
Creates a regular expression that can be used to create a Pattern that will match all strings that match the given input string.static java.util.regex.Pattern
createSearchPattern(java.lang.String input, boolean caseSensitive)
Note: this is the default model of how to let users search for things in Ghidra.static java.util.regex.Pattern
createStartsWithPattern(java.lang.String input, boolean allowGlobbing, int options)
Creates a regular expression Pattern that will match all strings that start with the given input string.
-
-
-
Field Detail
-
STAR
public static final java.lang.String STAR
Wildcard string for matching 0 or more characters.- See Also:
- Constant Field Values
-
NON_GLOB_BACKSLASH_PATTERN
public static final java.util.regex.Pattern NON_GLOB_BACKSLASH_PATTERN
A pattern that will find all '\' chars that are not followed by '*', '?' or another '\'
-
-
Method Detail
-
createSearchPattern
public static java.util.regex.Pattern createSearchPattern(java.lang.String input, boolean caseSensitive)
Note: this is the default model of how to let users search for things in Ghidra. This is NOT a tool to allow regex searching, but instead allows users to perform searches while using familiar globbing characters such as '*' and '?'.This method can be used with
Matcher.matches()
orMatcher.find()
.Create a regular expression from the given input. Note: the regular expression created by this method is not a pure regular expression. More specifically, many regular expression characters passed to this method will be escaped (see
#escapeRegexCharacters(String, boolean, boolean)
.Also, globbing characters will be changed from a regular expression meaning to a command-line style glob meaning.
Note: This method will escape regular expression characters, such as:
- ?
- .
- $
- ...and many others
- Parameters:
input
- string to create a regular expression fromcaseSensitive
- true if the regular expression is case sensitive- Returns:
- Pattern the compiled regular expression
- Throws:
PatternSyntaxExpression
- if the input could be compiled
-
createLiteralSearchPattern
public static java.util.regex.Pattern createLiteralSearchPattern(java.lang.String text)
Generate a compiled representation of a regular expression, ignoring regex special characters . The resulting pattern will match the literal text string.This method can be used with
Matcher.matches()
orMatcher.find()
.This method will not turn globbing characters into regex characters. If you need that, then see the other methods of this class.
- Parameters:
text
- search string- Returns:
- Pattern the compiled regular expression
- Throws:
PatternSyntaxExpression
- if the input could be compiled
-
createStartsWithPattern
public static java.util.regex.Pattern createStartsWithPattern(java.lang.String input, boolean allowGlobbing, int options)
Creates a regular expression Pattern that will match all strings that start with the given input string.This method should only be used with
Matcher.matches()
.The returned regular expression Pattern should be used with the "matches" method on a Matcher. (As opposed to "find").
- Parameters:
input
- the string that you want to your matched strings to start with.allowGlobbing
- if true, globing characters (* and ?) will converted to regex wildcard patterns; otherwise, they will be escaped and searched as literals.options
- anyPattern
options desired. For example, you can passPattern.CASE_INSENSITIVE
to get case insensitivity.- Returns:
- a regular expression Pattern that will match all strings that start with the given input string.
-
createEndsWithPattern
public static java.util.regex.Pattern createEndsWithPattern(java.lang.String input, boolean allowGlobbing, int options)
Creates a regular expression Pattern that will match all strings that end with the given input string.This method should only be used with
Matcher.matches()
.The returned regular expression Pattern should be used with the "matches" method on a Matcher. (As opposed to "find").
- Parameters:
input
- the string that you want to your matched strings to end with.allowGlobbing
- if true, globing characters (* and ?) will converted to regex wildcard patterns; otherwise, they will be escaped and searched as literals.options
- anyPattern
options desired. For example, you can passPattern.CASE_INSENSITIVE
to get case insensitivity.- Returns:
- a regular expression Pattern that will match all strings that end with the given input string.
-
createContainsPattern
public static java.util.regex.Pattern createContainsPattern(java.lang.String input, boolean allowGlobbing, int options)
Creates a regular expression Pattern that will match all strings that contain the given input string.This method should only be used with
Matcher.matches()
.- Parameters:
input
- the string that you want to your matched strings to contain.allowGlobbing
- if true, globing characters (* and ?) will converted to regex wildcard patterns; otherwise, they will be escaped and searched as literals.options
- anyPattern
options desired. For example, you can passPattern.CASE_INSENSITIVE
to get case insensitivity.- Returns:
- a regular expression Pattern that will match all strings that contain the given input string.
-
createPattern
public static java.util.regex.Pattern createPattern(java.lang.String input, boolean allowGlobbing, int options)
Creates a regular expression Pattern that will match all strings that match exactly the given input string.This method can be used with
Matcher.matches()
orMatcher.find()
.- Parameters:
input
- the string that you want to your matched strings to exactly match.allowGlobbing
- if true, globing characters (* and ?) will converted to regex wildcard patterns; otherwise, they will be escaped and searched as literals.options
- anyPattern
options desired. For example, you can passPattern.CASE_INSENSITIVE
to get case insensitivity.- Returns:
- a regular expression Pattern that will match all strings that exactly match with the given input string.
-
createPatternString
public static java.lang.String createPatternString(java.lang.String input, boolean allowGlobbing)
Creates a regular expression that can be used to create a Pattern that will match all strings that match the given input string.This method can be used with
Matcher.matches()
orMatcher.find()
.- Parameters:
input
- the string that you want to your matched strings to exactly match.allowGlobbing
- if true, globing characters (* and ?) will converted to regex wildcard patterns; otherwise, they will be escaped and searched as literals.- Returns:
- a regular expression Pattern String that will match all strings that exactly match with the given input string.
-
-