0
package xmlchars;

import java.util.regex.Pattern;

public class TestRegex {

public static final String SPECIAL_CHARACTERS = "(?i)^[^a-z_]|[^a-z0-9-_.]";


public static void main(String[] args) {
    // TODO Auto-generated method stub
    String name = "#1998St #";  
    Pattern pattern = Pattern.compile(SPECIAL_CHARACTERS);      
    System.out.println(pattern.matcher(name).replaceAll(""));//gives wrong output 1998St            
}

}

基本上我想要实现的是

  1. 仅以 az 和 _ 开头的字符串
  2. 包含 az 0-9 _ - 的字符串。开始后
  3. 整个字符串不区分大小写
4

4 回答 4

1

你可以说:

... SPECIAL_CHARACTERS = "^[a-z_][a-z0-9_]+$";

并通过以下方式定义模式:

Pattern pattern = Pattern.compile(SPECIAL_CHARACTERS, Pattern.CASE_INSENSITIVE);
于 2013-11-09T08:49:31.890 回答
0

我假设您正在尝试识别String与模式不匹配的任何内容。你所拥有的看起来几乎是正确的。看起来您的正则表达式可能像这样工作:

 "(?i)^([^a-z_]|[^a-z0-9-_.])"

仅当这两个组中的一个出现String. 相反,试试这个:

"(?i)(^[^a-z_])|[^a-z0-9-_.]"

为了进一步缩短它,您可以使用与 .相同的预定义字符类 。有了这个,你甚至不需要不区分大小写。\\W[^a-zA-Z_0-9]

"(^\\W)|[\\W-.]"

给定一个String被调用的str,str.replaceAll("(^\\W)|[\\W-.]","");将删除所有无效字符。


测试你的字符串:

class RegexTest
{
    public static void main (String[] args)
    {
        String str = "#1998St #";
        str = str.replaceAll("(^\\W)|[\\W-.]","");
        System.out.println(str);
    }
}

输出:

1998街

于 2013-11-09T18:54:13.700 回答
0

我设法破解了正则表达式。对现有的简单更改。

 "^[^a-z_]*|[^a-z_0-9-._]"
于 2013-11-09T14:29:19.070 回答
0

给你,有工作证明。

package xmlchars;

import java.util.regex.Pattern;

public class TestRegex {

public static final String SPECIAL_CHARACTERS = "^[^a-z_]*|[^a-z_0-9-._]";  

public static void main(String[] args) {
    // TODO Auto-generated method stub
    String name = " # !`~!@#$%^&*()-_=+{}[];:',<>/?19.- 98Cc#19 #/9_-8-.";      
    Pattern pattern = Pattern.compile(SPECIAL_CHARACTERS, Pattern.CASE_INSENSITIVE);        
    System.out.println(pattern.matcher(name).replaceAll(""));   // output _19.-98Cc199_-8-.
 }

}
于 2013-11-09T14:36:37.557 回答