REGEXP,在模式后搜索字符串
REGEXP, searching string after pattern
我有这个数据:
Turning on API signature validation for service : PGL
Turning off API signature validation for service : PLATFORM
Turning off API signature validation for service : WEBWORKS
Turning on API signature validation for service : TIMER_SINK
Turning on API signature validation for service : MESSAGING
Turning on API signature validation for service : EMAIL
Turning off API signature validation for service : USER_SECURITY
Initializing MDM for :USER_SECURITY
<MDM/>
我想在服务后捕获一个字符串:
我设法做到了:service.:.\K\w+
但是:
早些时候我尝试用不同的方式来做到这一点 service:\s* ([^\n\r]*)
但它 returns 我对服务的价值。
我从这篇文章中得到了这种方法 Regex to get the words after matching string 并且没有更大的效果。
谁能给我解释一下这个模式 ([\n\r].*Object Name:\s*([^\n\r]*)
)
更新:您可以使用以下正则表达式:
(?<=:\s).*
[\n\r].*Object Name:\s*([^\n\r]*)
[\n\r]
-> 匹配行尾
.*
-> 匹配任意字符N次
Object Name:
-> 匹配 "Object Name:"
\s*
-> 配N白spaces
[^\n\r]*
-> 除换行外任意字符,N次
像 ()
这样的括号定义了匹配组,所以在许多 API 中你会使用这样的东西:
matchresult.at(0)
= 整场比赛
matchresult.at(1)
= 这就是你想要的,即匹配 [^\n\r]*
的字符
所以最后一个白色space("Object Name:"之后的最后一个白色space)和行尾之间的所有字符。
[\n\r].*Object Name:\s*([^\n\r]*)
让我们分解一下:
[\n\r]
这匹配新行。 \n
和 \r
都可以在不同的情况下匹配新行。有时新行将包括它们:\r\n
。 [\n\r]
仅匹配其中一个,因为方括号后没有量词。
.
- 匹配除了新行之外的所有内容。 *
表示它将匹配零次到无限次。默认情况下,*
是贪婪的 - 即,它将匹配尽可能多的次数。
Object Name:
- 按字面匹配 Object Name:
- 包括 :
.
\s
匹配每个白色 space 字符 - 包括 space、制表符、换行符等。*
- 与之前相同 - 零到无限次,贪心。
([^\n\r]*)
- 因为这是在括号中,所以这将是 "captured",即这是此正则表达式中的第一个也是唯一的捕获组。这意味着如果您想稍后在替换中使用它,您可以使用 </code> 访问它。 </p>
<p><code>[]
- 方括号用于列出允许的字符。在这种情况下,因为我们有特殊字符 ^
里面,这将是一个不允许的字符列表。所以 [^\n\r]*
意味着它将匹配除新行之外的所有内容 - 零到无限次。与 .*
表达式的区别仅在于启用多行搜索的情况下,其中 .
也可以匹配新行。
我有这个数据:
Turning on API signature validation for service : PGL
Turning off API signature validation for service : PLATFORM
Turning off API signature validation for service : WEBWORKS
Turning on API signature validation for service : TIMER_SINK
Turning on API signature validation for service : MESSAGING
Turning on API signature validation for service : EMAIL
Turning off API signature validation for service : USER_SECURITY
Initializing MDM for :USER_SECURITY
<MDM/>
我想在服务后捕获一个字符串:
我设法做到了:service.:.\K\w+
但是:
早些时候我尝试用不同的方式来做到这一点 service:\s* ([^\n\r]*)
但它 returns 我对服务的价值。
我从这篇文章中得到了这种方法 Regex to get the words after matching string 并且没有更大的效果。
谁能给我解释一下这个模式 ([\n\r].*Object Name:\s*([^\n\r]*)
)
更新:您可以使用以下正则表达式:
(?<=:\s).*
[\n\r].*Object Name:\s*([^\n\r]*)
[\n\r]
-> 匹配行尾
.*
-> 匹配任意字符N次
Object Name:
-> 匹配 "Object Name:"
\s*
-> 配N白spaces
[^\n\r]*
-> 除换行外任意字符,N次
像 ()
这样的括号定义了匹配组,所以在许多 API 中你会使用这样的东西:
matchresult.at(0)
= 整场比赛
matchresult.at(1)
= 这就是你想要的,即匹配 [^\n\r]*
所以最后一个白色space("Object Name:"之后的最后一个白色space)和行尾之间的所有字符。
[\n\r].*Object Name:\s*([^\n\r]*)
让我们分解一下:
[\n\r]
这匹配新行。 \n
和 \r
都可以在不同的情况下匹配新行。有时新行将包括它们:\r\n
。 [\n\r]
仅匹配其中一个,因为方括号后没有量词。
.
- 匹配除了新行之外的所有内容。 *
表示它将匹配零次到无限次。默认情况下,*
是贪婪的 - 即,它将匹配尽可能多的次数。
Object Name:
- 按字面匹配 Object Name:
- 包括 :
.
\s
匹配每个白色 space 字符 - 包括 space、制表符、换行符等。*
- 与之前相同 - 零到无限次,贪心。
([^\n\r]*)
- 因为这是在括号中,所以这将是 "captured",即这是此正则表达式中的第一个也是唯一的捕获组。这意味着如果您想稍后在替换中使用它,您可以使用 </code> 访问它。 </p>
<p><code>[]
- 方括号用于列出允许的字符。在这种情况下,因为我们有特殊字符 ^
里面,这将是一个不允许的字符列表。所以 [^\n\r]*
意味着它将匹配除新行之外的所有内容 - 零到无限次。与 .*
表达式的区别仅在于启用多行搜索的情况下,其中 .
也可以匹配新行。