Solved

Regulal Expression to match on all printable characters

Posted on 2007-11-21
8
304 Views
Last Modified: 2010-04-21
Hi
I am trying to write a regular expression to match all printable character or more accuratly discard ASCII range 32 to 126.I thought it might be easier to match on any printable character.

However i can seem to get the RegExp to work in my java app.

I am trying

^[\w\d_~`!@#$%^&*()-+=<>?/\.,;:'"][}{\|]+$

but am not sure if its correct and not sure if i need to escape the \ character.

Help greatly appreciated.

My code is


public static void main(String[] args) {
          // Compile regular expression
            String patternStr =  "";
       
        //^[\w\d_~`!@#$%^&*()-+=<>?/\.,;:'"][}{\|]+$
       
//        String patternStr = "\\w";
        Pattern pattern = Pattern.compile(patternStr);
     
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String inputString = null;
       
        try {
              inputString = br.readLine();
        } catch (IOException ioe) {
           System.out.println("Unknown Error");
           System.exit(1);
        }

        Matcher matcher = pattern.matcher(inputString);
        boolean matchFound = matcher.find();    // true
       
        System.out.println("Match Found " + matchFound);


      }

0
Comment
Question by:Molko
  • 5
  • 3
8 Comments
 
LVL 86

Expert Comment

by:CEHJ
ID: 20326572
But is your intention to clean the string or just ignore it if it doesn't match?
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 20326608
In this case it would be more efficient and probably more convenient to do something like


boolean stillValid = true;

for (int i;i < s.length() && stillValid;i++) {

	char c = s.charAt(i)

	stillValid = (c >= ' ' && c <= '~');

}

Open in new window

0
 

Author Comment

by:Molko
ID: 20326680
Yes i intend to clean the string up
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 20326698
Even more reason then to use the above (or a variant)
StringBuilder sb = new StringBuilder(line);

boolean stillValid = true;

for (int i = sb.length() - 1;i >= 0;i--) {

	char c = sb.charAt(i)

	if (c < ' ' || c > '~') {

		sb.deleteCharAt(i);

	}

}

Open in new window

0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 

Author Comment

by:Molko
ID: 20326730
Ok, thank you. I've been struggling with a regular expression for ages. Thanks

Oh, is there a reason you are reading throught the string in reverse order in the 2nd example ?

0
 
LVL 86

Accepted Solution

by:
CEHJ earned 500 total points
ID: 20326747
>>Oh, is there a reason you are reading throught the string in reverse order in the 2nd example ?

It makes altering the buffer in the loop less (un)problematic
0
 

Author Closing Comment

by:Molko
ID: 31410327
ok ...thanks for your help
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 20326776
:-)
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Are you developing a Java application and want to create Excel Spreadsheets? You have come to the right place, this article will describe how you can create Excel Spreadsheets from a Java Application. For the purposes of this article, I will be u…
As most anyone who uses or has come across them can attest to, regular expressions (regex) are a complicated bit of magic. Packed so succinctly within their cryptic syntax lies a great deal of power. It's not the "take over the world" kind of power,…
Viewers learn about the “for” loop and how it works in Java. By comparing it to the while loop learned before, viewers can make the transition easily. You will learn about the formatting of the for loop as we write a program that prints even numbers…
Viewers learn about the scanner class in this video and are introduced to receiving user input for their programs. Additionally, objects, conditional statements, and loops are used to help reinforce the concepts. Introduce Scanner class: Importing…

863 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

25 Experts available now in Live!

Get 1:1 Help Now