我需要从文本文件中提取特定标记(在本例中为源代码)。我尝试了很多方法,但都没有成功。
例如,这是文件:
//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,&**
我尝试过使用awk
,grep
,sed
和bash
但未成功。
答案 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?