我在这里用Java编码。
我知道匹配任何数字或字母串的正则表达式是
"(0|[1-9][0-9]*)(\\.[0-9]+)?|[a-zA-Z]+"
但我希望匹配除字母或数字之外的任何内容,例如!, @, +, -
我尝试过[^.. ]
,但它无法正常工作。
例如,让我说我想做相反的事情,即返回包含数字或字符串或@的字符串的所有部分,我会这样做
public ArrayList<String> findMatch(String string){
ArrayList <String> outputArr = new ArrayList<String>();
Pattern p = Pattern.compile("(0|[1-9][0-9]*)(\\.[0-9]+)?|[a-zA-Z]+|\\@");
// recognizes number, string, and @
Matcher m = p.matcher(string)
while (m.find()) {
outputArr.add(m.group());
}
return outputArr;
}
让我们说我想找到与上面代码相反的内容,我该如何更改第3行?
答案 0 :(得分:2)
你可能想要使用这个:
\W+
这将匹配任何不是“单词字符”的字符串,定义为:
[a-zA-Z0-9_]
或“所有字母,数字和下划线”。如果要包含下划线,请尝试以下操作:
[\W_]+
或者,如果你想明确说明:
[^A-Za-z0-9]+
这意味着“除了字母和数字之外的所有东西”。
希望这有帮助。
答案 1 :(得分:1)
您可以使用的最简单的正则表达式模式是:[^ \ w] + 这将匹配所有既不是数字也不是字母的特殊字符。希望这可以帮助。这是一个包含示例示例的示例Regex Tester。您可以在此测试正则表达式的正确性。希望这会对你有所帮助。
从你提供的我所了解的例子中,你想要除字母,数字和'@'之外的所有字符。
在正则表达式中,'\ w'匹配任何字母(包括下划线)和任何数字。所以你需要否定这一点,以获得其他符号字符,如'$,#'等。
下面的表达式将解决您的问题= [^ \ w @] +
'^'表示否定符号。这里'^ \ w'表示'匹配除字母或数字之外的任何内容'。我还在表达式中添加了'@'符号,因为您也需要忽略它。
希望这会回答你的问题。
答案 2 :(得分:0)
如果您能提供更多细节,您的要求是什么?你期待什么? 它将帮助我找出解决方案。 您在查询中添加的内容看起来只是想要匹配特殊字符。我对吗? 如果是这样,你可以尝试:
[^A-Za-z0-9][your quantifier here]
quantifier can be:
? for 0 or 1 frequency
+ for >=1 frequency
* for >=0 frequency
假设你有一个类似
的字符串String s="shyuit6785%^7kui!@*&123f#$annds";
//And you want to find out the characters except alphabets and numerals . (I hope its your requirement)
Pattern p = Pattern.compile("[^A-Za-z0-9@]+");
Matcher m = p.matcher(s);
while (m.find())
{
System.out.println("Found a required character " + m.group() + " at index number " +m.start());
}