REGEXP,在模式之后搜索字符串

时间:2016-06-30 13:28:33

标签: regex notepad++ regex-lookarounds

我有这些数据:

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+

BUT: 早些时候我尝试用不同的方法service:\s* ([^\n\r]*)来做这件事,但它通过服务回报了我的价值。 我从这篇文章Regex to get the words after matching string得到了这种方式,没有更大的影响。

有人能解释一下这种模式([\n\r].*Object Name:\s*([^\n\r]*)

3 个答案:

答案 0 :(得分:2)

[\n\r].*Object Name:\s*([^\n\r]*)

[\n\r] - &gt;匹配一行的结尾

.* - &gt;匹配任何字符N次

Object Name: - &gt;匹配“对象名称:”

\s* - &gt;匹配N个空格

[^\n\r]* - &gt;任何字符,除了新行,N次

()这样的括号定义匹配组,因此在许多API中你会使用类似的东西:

matchresult.at(0) =整场比赛

matchresult.at(1) =这就是你想要的,即匹配[^\n\r]*

的字符

所以最后一个空格(“对象名称:”之后的最后一个空格)和行尾之间的所有字符。

答案 1 :(得分:1)

[\n\r].*Object Name:\s*([^\n\r]*)

让我们分解一下:

[\n\r]这匹配新行。在不同情况下,\n\r都可以匹配新行。有时,新行将包含两者:\r\n[\n\r]只匹配其中一个,因为方括号后面没有量词。

. - 匹配除新行之外的所有内容。 *表示它将匹配零到无限次。默认情况下,*是贪婪的 - 即它会尽可能多地匹配。

Object Name: - 字面匹配Object Name: - 包括:

\s匹配每个空白字符 - 包括空格,制表符,新行等。* - 同样在之前 - 零到无限次,贪婪。

([^\n\r]*) - 因为它在括号中,所以这将被捕获&#34;,即这是此正则表达式中的第一个也是唯一的捕获组。这意味着如果您希望稍后在替换中使用它,则可以使用$1访问它。

[] - 方括号用于允许的字符列表。在这种情况下,由于我们内部有特殊字符^,因此这将是一个不允许的字符列表。因此[^\n\r]*意味着它将匹配除新行之外的所有内容 - 零到无限次。 .*表达式的差异仅在于启用了多行搜索,.也可以匹配新行。

答案 2 :(得分:0)

更新:您可以使用以下正则表达式:

(?<=:\s).*

Demo and Explaination