正则表达式为起始序列

时间:2013-11-09 08:45:50

标签: java regex

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. 仅以a-z和_
  2. 开头的字符串
  3. 包含a-z 0-9 _ - 的字符串。
  4. 之后
  5. 对整个字符串不区分大小写

4 个答案:

答案 0 :(得分:1)

你可以说:

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

并通过说:

来定义模式
Pattern pattern = Pattern.compile(SPECIAL_CHARACTERS, Pattern.CASE_INSENSITIVE);

答案 1 :(得分:0)

我成功破解了正则表达式。简单改变现有的。

 "^[^a-z_]*|[^a-z_0-9-._]"

答案 2 :(得分: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-.
 }

}

答案 3 :(得分:0)

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

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

只有当这两个组中的一个出现在String开始时才会匹配。相反,试试这个:

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

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

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

如果String被称为strstr.replaceAll("(^\\W)|[\\W-.]","");将删除所有无效字符。


测试你的字符串:

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

输出:

  

1998St