使用正则表达式查找某些特定文本

时间:2014-08-14 23:08:02

标签: regex bash awk sed grep

我需要从文本文件中提取特定标记(在本例中为源代码)。我尝试了很多方法,但都没有成功。

例如,这是文件:

//messagebox("ñ",string(asc("ñ")))
//messagebox("Ñ",string(asc("Ñ")))
//messagebox("ñ",string(char(241)))

messagebox("Hi")

IF Trim(sle_user_id.text) = "" AND Trim(sle_password.text) = "" THEN
    MessageBox(Titulo_Msg,&
              "Sr Usuario :~r~nDebe ingresar los datos solicitados.",StopSign!,Ok!)
    sle_user_id.SetFocus()
    Return
End If

我需要提取(在屏幕上或文件中)标记"messagebox(THIS IS WHAT A I NEED TO EXTRACT)"

中括号内的文本

问题是:

  • 对于这种情况,[**messagebox("ñ",string(asc("ñ")))**]显示截断的字词,它在第一个右括号处结束:**("ñ",string(asc("ñ"**

  • 对于这种情况,[ **MessageBox(Titulo_Msg,& "Sr Usuario :~r~nDebe ingresar los datos solicitados.",StopSign!,Ok!)** ]仅显示该行中的匹配项,但不显示括号内的完整文字:**MessageBox(Titulo_Msg,&**

我尝试过使用awkgrepsedbash但未成功。

3 个答案:

答案 0 :(得分:0)

感谢您的所有答案,这对我帮助很大,这个命令完全符合我的要求:

awk '/[mM]essage[bB]ox\(/,/\)$/ {gsub(/.*[mM]essage[Bb]ox\(|\)$/,""); print}' file

祝你好运! 卡洛斯

答案 1 :(得分:-1)

您可以使用awk

awk '/[mM]essage[bB]ox\(/,/\)$/ {gsub(/.*[mM]essage[Bb]ox\(|\)$/,""); print}' file

输出:

"ñ",string(asc("ñ))
"Ñ",string(asc("Ñ))
"ñ",string(char(24))
"Hi
Titulo_Msg,&
              "Sr Usuario :~r~nDebe ingresar los datos solicitados.",StopSign!,Ok

messagebox(...)MessageBox(...)括号之间提取所有内容。

注意

如果在最后结束)后的某一行中有文字,或者在最后结束)之前的某一行末尾有任何)时,这会中断MessageBox(...)的内容跨越多行。

答案 2 :(得分:-1)

没有。您要做的是要求正确匹配嵌套括号,而不能通过正则表达式完成。

不幸的是,正则表达式的有限状态机无法匹配嵌套括号,因为它不是无上下文的。有关原因的更详细说明可在此处找到:Can regular expressions be used to match nested patterns?