Java 模式匹配仅从CSS文件中获取类名
我想从下面的示例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-
.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是用于读取和写入特定类型二进制数据的专用流。很可能您永远不会有合法的需要使用它们。