Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 模式匹配仅从CSS文件中获取类名_Java_Css_Regex - Fatal编程技术网

Java 模式匹配仅从CSS文件中获取类名

Java 模式匹配仅从CSS文件中获取类名,java,css,regex,Java,Css,Regex,我想从下面的示例CSS文件中获取类名 .labelIcon{ background-image: url(../images/eportal/Label-icon.png); background-repeat: no-repeat; height: 16px; } .appsCSS tr:nth-child(1){ border: 1px solid #AAAAAA; border-top: none; background:-webkit-

我想从下面的示例CSS文件中获取类名

.labelIcon{
    background-image: url(../images/eportal/Label-icon.png); 
    background-repeat: no-repeat; 
    height: 16px;
   }
  .appsCSS tr:nth-child(1){
  border: 1px solid #AAAAAA;
  border-top: none; 
  background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05,  #aae3fd));
vertical-align:top;
}
  div.outer {  
  display: block; width:960px;height:1030px;position:relative;
 }
 .dijitButton {
font-family:'Times New Roman',Times,serif;
color:white;                    
 }
 .claro .dijitTitlePane{
    background:-o-linear-gradient(bottom, #2789c6 5%, #79bcff 100%);
    background:-moz-linear-gradient( center top, #2789c6 5%, #79bcff 100% ) !important;
    background-color:#2789c6 !important;
    }
    input[type="text"]:focus,
    select:focus,
    textarea:focus{
      background-color: #f6fcfe;
    }
    #eGrid {
      width: 70em;
      height: 30em;
    }
   .cssmenu ul,
   .cssmenu li, {
    margin: 0;
    padding: 0;
    position: relative;
   }
* {
    border: 0;
    font-family: inherit;
   }
  :focus {
    outline: 0;
   }
    ul {
        list-style-type: none;
     }
       #login .controlbar {
    padding: 10px;
         font-weight: bold;
         }
我只需要上面的这些类名,
labelIcon
dijitButton
,以及前缀为
和后缀为
”{

我尝试了下面的正则表达式代码,但没有得到正确的输出

String dirFile=workspace + File.separatorChar + projectName + File.separatorChar +Constants.WEBCONTENT + File.separatorChar +"style";
final File folder = new File(dirFile);
if(folder.isDirectory()){
    String result = listFilesForFolder(folder,workspace,projectName);
    if(result != ""){
        Pattern pattern = Pattern.compile("(\\.)(.*?)(\\{)",Pattern.DOTALL | Pattern.CASE_INSENSITIVE | Pattern.MULTILINE );
            Matcher matcher = pattern.matcher(result);
            String classNames="";
            while(matcher.find())
            {
                classNames+=matcher.group(2)+"*";
            }
            System.out.println("class: "+classNames);
    }else{
        return;
     }
}
private String listFilesForFolder(File folder, String workspace, String projectName) {
    String allLines = "";
    for (final File fileEntry : folder.listFiles()) {
        if (fileEntry.isDirectory()) {
            listFilesForFolder(fileEntry,workspace,projectName);
        } else {
            String FileName = fileEntry.getName();
            String filePath=workspace + File.separatorChar + projectName + File.separatorChar +Constants.WEBCONTENT + File.separatorChar +"style"+ File.separatorChar+FileName;
            File f = new File(filePath);
            if(f.length() > 0){
                String strLine;
                FileInputStream fstream = null;
                try {
                    fstream = new FileInputStream(filePath);
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                                    // use DataInputStream to read binary NOT text
                // DataInputStream in = new DataInputStream(fstream);
                BufferedReader br = new BufferedReader(new InputStreamReader(fstream));

                try {
                    while ((strLine = br.readLine()) != null){
                        allLines += strLine.trim() +"\n";
                    }
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                System.out.println("File exist with Content "+allLines);
            }
        }
    }
    return allLines;
}

您可以使用以下内容:

public class TestRegexp {
    public static void main(String[] args) throws Exception {
        Scanner scanner = new Scanner(new FileReader("test.css"));
        String match = null;
        Pattern pattern = Pattern.compile("\\n\\s*(\\.[^\\. ]+)\\s*\\{");
        while ((match = scanner.findWithinHorizon(pattern, 0)) != null) {
            Matcher matcher = pattern.matcher(match);
            matcher.find();
            System.out.println(matcher.group(1));
        }       
    }
}

该模式查找一个换行符,该换行符可能有一些空格后跟一个点,然后是任何非空格字符,或者一个点后跟任何空格和开口{

你可以在大多数IDE中为正则表达式使用
搜索
/
替换
,为什么要写这么多代码?!在IDE中的CSS文件上测试你的模式,你当然也可以在CSS文件/文件夹中搜索文件..仅供参考,你不需要使用DataInputStream;只需传递FileInputStream对象(
fstream
)直接指向InputStreamReader构造函数。DataInputStream和DataOutputStream是用于读取和写入特定类型二进制数据的专用流。很可能您永远不会有合法的需要使用它们。