繁体   English   中英

正则表达式中的星号

[英]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 educationassistant director of field education
  • development corporation

为什么第一个正则表达式失败很难从给出的例子中看出来。 .*:\\*?(.*)\\**$表示行结束需要为零或多个*\\**

假设你的换行符是提供的,它只会匹配development corporation ,因为锚点$ (行结束)正常单行模式,意味着“字符串结尾”。 因此正则表达式只能匹配ONCE。 如果将修改器更改为多行模式(意味着, $匹配每个\\r\\n而不仅仅是结束字符串)将为您提供所需的结果。


SingleLine模式,匹配:

  • development corporation

    .*:\\*?(.*)\\**$

正则表达式可视化

Debuggex演示


多线模式匹配:

  • assistant director of field educationassistant director of field education
  • development corporation

    .*:\\*?(.*)\\**$

正则表达式可视化

Debuggex演示


^$的beavhiour取决于修饰符:

鉴于字符串

Hello
World

并且在单行模式下使用^(.*)$将匹配Hello World 在多行模式下使用相同的模式将在两个不同的Matchgroup中匹配HelloWorld

在SingleLine中,String将由正则表达式引擎处理

^Hello
World$

在MultiLine模式下,引擎会对其进行线程化

^Hello$
^World$

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM