[英]Asterisk in regex
我试图得到冒号后的文本行的部分。 例如,从这个文本
previous usc contact name:*assistant director of field education*
agency name:*development corporation
我想得到以下内容:
assistant director of field education
1010 development corporation
我尝试了以下正则表达式
.*:\*?(.*)\**$
这没用。 现在正在做的是:
.*:\*?(.*)\*
我不明白为什么它在没有星号的第二行工作,正则表达式需要星号。 我不明白为什么第一个正则表达式不能正常工作。
谢谢。
简而言之:
第二个正则表达式.*:\\*?(.*)\\*
有效,因为:
.*
匹配:
previous usc contact name
和 agency name
后跟:\\*
(转义*
表示:匹配*
)。
(.*)\\*
终于匹配EVERYHTING直到最后*
。
(假设你错过了最后一行的明星,这匹配:)
assistant director of field education
和assistant director of field education
development corporation
为什么第一个正则表达式失败很难从给出的例子中看出来。 .*:\\*?(.*)\\**$
表示行结束需要为零或多个*
( \\**
)
假设你的换行符是提供的,它只会匹配development corporation
,因为锚点$
(行结束)正常单行模式,意味着“字符串结尾”。 因此正则表达式只能匹配ONCE。 如果将修改器更改为多行模式(意味着, $
匹配每个\\r\\n
而不仅仅是结束字符串)将为您提供所需的结果。
SingleLine模式,匹配:
development corporation
.*:\\*?(.*)\\**$
多线模式匹配:
assistant director of field education
和assistant director of field education
development corporation
.*:\\*?(.*)\\**$
^
和$
的beavhiour取决于修饰符:
鉴于字符串
Hello
World
并且在单行模式下使用^(.*)$
将匹配Hello World
。 在多行模式下使用相同的模式将在两个不同的Matchgroup中匹配Hello
和World
。
在SingleLine中,String将由正则表达式引擎处理
^Hello
World$
在MultiLine模式下,引擎会对其进行线程化
^Hello$
^World$
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.