我有一些长字符串,我试图抓住一个子字符串,直到满足某个字符。 让我们假设我有以下字符串,我希望得到文本直到第一个&符号。
abc.8965.aghtj&hgjkiyu5.8jfhsdj
我想在&符号之前提取出现的内容:abc.8965.aghtj 我认为这会奏效:
grep'^.*&{1}'
我会将其翻译为
^ start of string
.* match whatever chars
&{1} until the first ampersand is matched
有什么建议吗? 我担心这会花费数周的时间。
答案 0 :(得分:2)
{1}
与第一次匹配不匹配;相反,它意味着“恰好匹配前面一个模式/字符”,这与只匹配字符(&{3}
匹配&&&
)相同。
为了匹配&
的第一次出现,您需要使用.*?
:
grep'^.*?&'
通常情况下,.*
是贪婪的,这意味着它尽可能匹配。这意味着您的模式将匹配 last &符号而不是第一个。 .*?
是非贪婪版本,在完成模式时尽可能少地匹配。
更新: grep可能不支持该语法。这是另一种选择:
'^[^&]*&'
它匹配任何不是&符号的东西,直到第一个&符号。
您还可能必须在grep(-E
)中启用扩展正则表达式。
答案 1 :(得分:0)
试试这个:
^.*?(?=&)
它不会得到&符号,只是它之前的文字