Regular exp从匹配字符串开始,直到某个字符被满足
问题描述:
我有一些长字符串,我试图捕捉一个子字符串,直到某个字符被满足。 让我们假设我有下面的字符串,并且我想在第一个&符号之前得到文本。Regular exp从匹配字符串开始,直到某个字符被满足
abc.8965.aghtj&hgjkiyu5.8jfhsdj
我想提取什么符号所以之前存在:abc.8965.aghtj W¯¯认为这会工作:
grep'^.*&{1}'
我将它翻译为
^ start of string
.* match whatever chars
&{1} until the first ampersand is matched
有什么建议吗? 恐怕这需要我数周
答
{1}
不匹配的第一次出现;相反,它意味着“仅匹配前面的模式/字符之一”,这与匹配字符(&{3}
匹配&&&
)完全相同。
为了匹配的&
的第一发生,你需要使用.*?
:
grep'^.*?&'
通常情况下,.*
是贪婪的,这意味着它尽可能匹配。这意味着你的模式将与最后的和号相匹配,而不是第一个。 .*?
是非贪婪版本,在满足模式的同时尽可能少地匹配。
更新:该语法可能不被grep支持。这里是另一种选择:
'^[^&]*&'
它匹配任何不是&符号,直到第一个符号。
您还可能需要在grep中启用扩展正则表达式(-E
)。
的grep是不幸的是没有工作,我明白你的意思,虽然'^ *&? – JBoy 2013-03-04 13:47:20
@JBoy,我对答案做了更新。 – 2013-03-04 13:54:05