我有这些数据:
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]*)
)
答案 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)