常规exp以匹配字符串从开始到满足某些char

时间:2013-03-04 13:38:43

标签: regex

我有一些长字符串,我试图抓住一个子字符串,直到满足某个字符。 让我们假设我有以下字符串,我希望得到文本直到第一个&符号。

abc.8965.aghtj&hgjkiyu5.8jfhsdj

我想在&符号之前提取出现的内容:abc.8965.aghtj 我认为这会奏效:

grep'^.*&{1}'

我会将其翻译为

^ start of string
.* match whatever chars
&{1} until the first ampersand is matched

有什么建议吗? 我担心这会花费数周的时间。

2 个答案:

答案 0 :(得分:2)

{1}与第一次匹配不匹配;相反,它意味着“恰好匹配前面一个模式/字符”,这与只匹配字符(&{3}匹配&&&)相同。

为了匹配&第一次出现,您需要使用.*?

grep'^.*?&'

通常情况下,.*是贪婪的,这意味着它尽可能匹配。这意味着您的模式将匹配 last &符号而不是第一个。 .*?是非贪婪版本,在完成模式时尽可能少地匹配。

更新: grep可能不支持该语法。这是另一种选择:

'^[^&]*&'

它匹配任何不是&符号的东西,直到第一个&符号。

您还可能必须在grep(-E)中启用扩展正则表达式。

答案 1 :(得分:0)

试试这个:

^.*?(?=&)

它不会得到&符号,只是它之前的文字