0

我有一些长字符串,我试图捕获一个子字符串,直到遇到某个字符。假设我有以下字符串,并且我想在第一个&符号之前获取文本。

abc.8965.aghtj&hgjkiyu5.8jfhsdj

我想提取&符号之前存在的内容:abc.8965.aghtj W 认为这会起作用:

grep'^.*&{1}'

我会将其翻译为

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

有什么建议吗?恐怕这需要我几个星期

4

2 回答 2

2

{1}与第一次出现不匹配;相反,它的意思是“完全匹配前面的模式/字符之一”,这与仅匹配字符(&{3}将匹配&&&)相同。

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

grep'^.*?&'

通常,.*是贪婪的,意味着它尽可能匹配。这意味着您的模式将匹配最后一个&符号而不是第一个。 .*?是非贪婪版本,在满足模式的同时尽可能少地匹配。

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

'^[^&]*&'

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

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

于 2013-03-04T13:42:18.427 回答
0

试试这个:

^.*?(?=&)

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

于 2013-03-04T13:47:05.560 回答