需要编写正则表达式以匹配引用和未引用的项目
\"[a-z,A-Z]+.*\"|\b[a-z,A-Z,0-9]+.*(?<=[\n+\r+\s+]})
要匹配的样本数据
"visitor block" {
option {
disable-server-response no;
}
source any;
category any;
tag guest-in;
}
visitor_Internet {
option {
disable-server-response no;
}
source-user any;
action allow;
}
"Deny guest" {
option {
disable-server-response no;
}
action deny;
tag guest;
}
通过正则表达式,我需要选择双引号(访问者块,Deny guest)中的字符串,并且也不要选择用双引号引起来的字符串,例如visitor_Internet.only名称字符串要捕获
答案 0 :(得分:0)
我想你想要
{
之前的所有文本,直到}
,其后是换行符,然后是空白,其后是第一个组模式或字符串的末尾。您可以使用
(?ms)^\s*"([a-zA-Z][^"]*)"\s*{(.*?)}(?=\h*\n\s*"[a-zA-Z][^"]*"\s*{|\s*\z)
请参见regex demo
注意:如果块之间的行不匹配,则此方法将无效。
详细信息
(?ms)
-启用多行和dotall模式^
-一行的开头\s*
-0个或多个空格"
-一个"
([a-zA-Z][^"]*)
-第1组:一个ASCII字母,然后是"
以外的0+个字符"
-一个"
字符\s*
-超过0个空格{
-一个{
字符(.*?)
-第2组:任意0个以上的字符,尽可能少}
-一个}
字符,后跟(?=\h*\n\s*"[a-zA-Z][^"]*"\s*{|\s*\z)
-要么
\h*\n\s*"[a-zA-Z][^"]*"\s*{
-0+个水平空格,一个换行符,0 +个空格,"
,一个ASCII字母,除"
,"
以外的0个字符,然后为0 +空格和{
|
-或\s*\z
-字符串的末尾有0+个空格。