我试图编写一个匹配任何分号符号;
的正则表达式,该符号不以!important
或!important
例如,如果我有以下字符串:
.myclass {
width: 400px;
color: #333;
margin: 20px !important;
padding: 20px !important ;
top: 1px;
}
我想匹配这些行:
width: 400px;
color: #333;
top: 1px;
然后,我可以对它们运行替换并将!important
属性添加到它们。
我应该如何编写与此匹配的正则表达式?
答案 0 :(得分:4)
尝试使用这个:(?!.*!important).*;
将它分解成更小的部分,我们使用负向前瞻(?!<pattern>)
来表示我们希望匹配字符串中稍后不匹配的位置。在那之后,我们只需要查看任何字符,直到我们看到结束;
。设置负向前瞻的方式,如果该行在;
中结束并且与!important
匹配,则无论中间有多少空格,它都将失败。由于CSS可以有空格,因此可以处理更多的情况,你可以看到0或1个空格。
如果您希望它与您在!important
后;
之后检查零或一个空格的原始帖子完全相同,则可以将前瞻更改为包括\s?;
,在!important
当然之后。这是检查任何空格,零或一个,直接跟;
。
答案 1 :(得分:0)
答案 2 :(得分:0)
如果这完全是一个字符串变量
.myclass {
width: 400px;
color: #333;
margin: 20px !important;
padding: 20px !important ;
top: 1px;
}
然后你可以将它拆分为新行:
String[] lines = input.split(System.getProperty("line.separator", "\r\n"));
然后,跳过第一个和最后一个元素(包含大括号),只获得不匹配"!important ?;"
Matcher importantMtchr = Pattern.compile("!important ?;").matcher("");
for(int i = 1; i < lines.length - 1; i++) {
String line = lines[i];
if(!importantMtchr.reset(line).find()) {
System.out.println(line);
}
}
完整代码:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class NotExclamationImportantLines {
public static final String LINE_SEP = System.getProperty("line.separator", "\r\n");
public static final void main(String[] ignored) {
String input = new StringBuilder().
append("myclass {" ).append(LINE_SEP).
append("width: 400px;" ).append(LINE_SEP).
append("color: #333;" ).append(LINE_SEP).
append("margin: 20px !important;" ).append(LINE_SEP).
append("padding: 20px !important ;").append(LINE_SEP).
append("top: 1px;" ).append(LINE_SEP).
append("}" ).toString();
//Split on the newline
String[] lines = input.split(LINE_SEP);
//Skip over the first and last elements, and only
//print out those that don't contain the regular
//expression `"important! ?"
Matcher importantMtchr = Pattern.compile("!important ?;").matcher("");
for(int i = 1; i < lines.length - 1; i++) {
String line = lines[i];
if(!importantMtchr.reset(line).find()) {
System.out.println(line);
}
}
}
}
输出:
width: 400px;
color: #333;
top: 1px;
答案 3 :(得分:0)
^(?!.*!important\s*;).*?(;)\s*$
^^^^^^^^^^^^^^^^ ^
(1) (2)
!important
后跟零个或多个空格字符后跟分号的行。请参阅live demo。