How To Find Wild Cards In A String Using Regular Expressions?

This is how it began – our users started using wild cards (%%) sign in the search query. Since our legacy application had queries with like clause (apparently the original developers thought the end users are stupid jerks and would only key in the names). But there were smart users who knew about the wild card searches.

Our team came to a spotlight when a user used double wild cards in one of the search engines and brought the systems down !! Yes, it fetched millions of rows and the computations on those rows on a report led to JVM’s memory being depleted and the system crashed.

So how would you solve it instantly (I know it was just patching rather than redesign – but was important to bring the system up and was quick and cost effective solution). All we had to do was to see if the search fields had any wild cards in them. If they did, the search would not be performed and the user would be taken back to the search screen with some sort of errors.

In the following code, I have used the regular expressions to catch wild cards and the ones that enclose some text in between (alphanumeric and spaces to be exact). But you can always add more characters if you want.

 * @author Kushal Paudyal
 * Finds if any wild cards (%%) are used in an String.
 * Wildcards can enclose digits or numbers or their combinations
import java.util.regex.Pattern;

public class WildCardUsageFinderRegex {

     * Regular Expression to match the Wild Card Usage (% %) 
     * It tests for two % flags separated by N number of spaces or characters A-Z or a-z or 0-9. 
     * Can be modified to include other characters
    private static final String WILD_CARD_EXPRESSION = "^%([ A-Za-z0-9])*%$";

     * Testing the validation with some sample wild cards
    public static void main(String[] args) {

        String[] wildCards = { "% %", "%%", "%  ", "%dc%", "%123%" };

        int index = 0;
        boolean isMatch = false;
        while (index < wildCards.length) {
            isMatch = isWildCardUsed(wildCards[index]);
            System.out.println("String " + wildCards[index] + " - " + (isMatch ? "Valid" : "Invalid"));


     * This method returns true if the parameter string contains a valid wild card
    public static boolean isWildCardUsed(String string) {

        return Pattern.matches(WILD_CARD_EXPRESSION, string);


If you run the program, you will find the following results.

String % % - Valid
String %% - Valid
String %   - Invalid
String %dc% - Valid
String %123% - Valid

You can use a simple solution like this to see if any fields have used wild cards.