Java Regular expression matching square brackets [duplicate] - java

This question already has answers here:
Regular expression to extract text between square brackets
(15 answers)
Closed 12 months ago.
I'm trying to do the following using regular expression (java replaceAll):
**Input:**
Test[Test1][Test2]Test3
**Output**
TestTest3
In short, i need to remove everything inside square brackets including square brackets.
I'm trying this, but it doesn't work:
\\[(.*?)\\]
Would you be able to help?
Thanks,Sash

You can try this regex:
\[[^\[]*\]
and replace by empty
Demo
Sample Java Source:
final String regex = "\\[[^\\[]*\\]";
final String string = "Test[Test1][Test2]Test3\n";
final String subst = "";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
final String result = matcher.replaceAll(subst);
System.out.println(result);

Your original pattern works for me:
String input = "Test[Test1][Test2]Test3";
input = input.replaceAll("\\[.*?\\]", "");
System.out.println(input);
Output:
TestTest3
Note that you don't need the parentheses inside the brackets. You would use that if you planned to capture the contents in between each pair of brackets, which in your case you don't need. It isn't wrong to have them in there, just not necessary.
Demo here:
Rextester

\[\w+]
This works for me, this regex matches all the words which are enclosed in square brackets.

Related

kotlin/java match a number in a string with a regular expression [duplicate]

This question already has answers here:
How to extract numbers from a string and get an array of ints?
(13 answers)
Closed 1 year ago.
For example, if I have these strings, is there any way I can get 123 of all these strings, or 777 or 888?
https://www.example.com/any/123/ and
https://www.example.com/any/777/123/ and
https://www.example.com/any/777/123/888
What I mean is how to match the first or second or the third last number in the string.
You can use capture groups to solve this as
val strList = listOf("https://www.example.com/any/777/123/888", "https://www.example.com/any/123/", "https://www.example.com/any/777/123/")
val intList = mutableListOf<Int>()
val regex = Regex("/?(\\d+)")
strList.forEach { str ->
regex.findAll(str).forEach {
intList.add(it.groupValues[1].toInt())
}
}
Assuming the digits all follow a slash and nothing intervenes,
(?<=/)\d+(?=/\d+){0}$ parses the last number
(?<=/)\d+(?=/\d+){1}$ parses the second to last number
(?<=/)\d+(?=/\d+){2}$ parses the third to last,
etc.
With Java, You can make use of the Pattern and Matcher class from the java.util.regex package.
e.g for your case above, you want to match integers - use \d Predefined character class to match digits.
String str = "https://www.example.com/any/777/123/";
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(str);
for(; matcher.find(); System.out.println(matcher.group()));
In the above you loop through the String finding matches, and printing each subsequent found match.

regex - Java Regular expression matching square bracket [duplicate]

This question already has answers here:
Regular expression to extract text between square brackets
(15 answers)
Closed 12 months ago.
Would someone kindly demonstrate what the regular expession would be for matching the square brackets?
I'm currently using java.util.regex.
For example, let's say we have the following line:
public static void main (String[] args) {
I need to match only the OPEN square bracket [ and next, the close square bracket ].
I'm not saying I need to match the text between the square brackets.
I have tried with
[\\]]
and
\\]
Unfortunately, it matches the text as well and I need to match only [ or ].
The weird thing is, when I try to match the { with [\\}], it works!
Thoughts?
You can do it using:
String text = "[This is the text]";
String patternString = "\\[.*.\\]";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(text);
System.out.println("Matcher? " + matcher.matches());
This return true if the text has a [ and ] and false if it doesn't
Hope this can help you.
Thanks.

Need a Regex that extracts a string between two "delimiting" strings [duplicate]

This question already has answers here:
Java Regex Capturing Groups
(4 answers)
Closed 6 years ago.
I need to get the string between by_ and _on.
So far I have this, but don't understand how to truncate the actual "string delimiters":
by_(.*)_on
Sample input:
Files_by_wesasegeaazedude_on_January_26.jpg
Current Match:
by_wesasegeaazedude_on
Needed Match:
wesasegeaazedude
Your expression is good*. All you need to do is extracting the content of the first capturing group:
Pattern regex = Pattern.compile("by_(.*)_on");
String str = "Files_by_wesasegeaazedude_on_January_26.jpg";
Matcher m = regex.matcher(str);
if (m.find()) {
String res = m.group(1);
}
Demo.
* Well, almost good. If you expect inputs with multiple file names on the same line, you may want to consider using reluctant qualifier, i.e. by_(.*?)_on
I would do this without regular expressions.
int start = str.indexOf("by_");
int end = str.indexOf("_on", start + 1); // or lastIndexOf("_on"), for greedy match.
assert start > 0 && end > start;
String part = str.substring(start + 3, end);
You can simply use positive lookarounds:
String regex = "(?<=by_).*(?=_on)";
What this regex does is:
match anything: .*
that is preceded by by_: (?<=by_)
and followed by _on: (?=_on)

regular expression to extract string from java code [duplicate]

This question already has answers here:
Regex to replace all string literals in a Java file
(4 answers)
Closed 8 years ago.
The sample source code to match is
String string="welcome";
String k="a\"welcome";
I am using "(\"[^(\")]*\")" regex in java.
But this extracts
0:"welcome"
0:"a\"
Expected output is
0:"welcome"
0:"a\"welcome"
What change should i make in regex to get the expected output ?
Java source :
private static String pattern1="(\"[^(\")]*\")";
public void getStrings(){
Pattern r = Pattern.compile(pattern1);
Matcher m = r.matcher("String string=\"welcome\";\n" +
"String k=\"a\\\"welcome\";");
while(m.find()){
System.out.println("0:"+m.group(0));
}
}
Just use lookahead and lookbehind in your regex,,
(?<==)(".*?")(?=;)
Get the value from group index 1.
DEMO
Pattern r = Pattern.compile("(?<==)(\".*?\")(?=;)");
Matcher m = r.matcher("String string=\"welcome\";\n" +
"String k=\"a\\\"welcome\";");
while(m.find()){
System.out.println("0:"+m.group(1));
}
Output:
0:"welcome"
0:"a\"welcome"
OR
Use the greediness of *,
Pattern r = Pattern.compile("(\".*\")");
OR
It skips the double quotes which are preceded by a backslash,
Pattern r = Pattern.compile("(\\\".*?(?<=[^\\\\])\\\")");
Why do you even bother with variable assignment. You know that everything within "" is a string.
"(.+)"\s*; should do it just fine.

Java Regular Expression checking for symbols [duplicate]

This question already has answers here:
Closed 10 years ago.
Possible Duplicate:
Regular expression for excluding special characters
How would I check if a String contains a symbol? let's say I have this String
"SUGAR :::: SUGAR"
I would want to check if that string contains = the following Symbols
":,?,!##$%^&*()";
I tried this
Pattern p = Pattern.compile("[?,!,#,$,%,^,&,*,(,)]");
Matcher m = p.matcher("?");
boolean b = m.matches();
System.out.println(b);
But what if the text contains multiple occurrences of that symbol
Try this:
Pattern pat = Pattern.compile("[:?!##$%^&*()]");
String str = "SUGAR :::: SUGAR";
Matcher m = pat.matcher(str);
if (m.find()) {
System.out.println("string contains pattern");
}
The above will check if any part of the string contains at least one occurrence of any of the symbols in the pattern (no need to separate them with ,).
guava may be?
CharMatcher matcher = CharMatcher.anyOf(":,?,!##$%^&*()");
boolean result = matcher.matchesAnyOf("SUGAR :: SUGAR");
System.out.println(result);
Just simply match against a set containing these characters: [:,?!##$%^&*()]
If you want to check against the symbol -, position it to the end of the set: [...-]
There's no need to separate elements in a set by comma.
If you want to check for ANY non alphanumeric use \W instead: [\W_] (because \W does not match _)

Categories

Resources