Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
包含文件路径的lldb regex_Regex_Nsstring_Escaping_Lldb - Fatal编程技术网

包含文件路径的lldb regex

包含文件路径的lldb regex,regex,nsstring,escaping,lldb,Regex,Nsstring,Escaping,Lldb,我正在尝试编写一个lldb别名,用于将图像写入文件。以下各项工作正常,但存在一个问题: command regex logImageFile 's/(.+) (.+)/ expr (int) [ (id)UIImagePNGRepresentation(%1) writeToFile: @"%2.png" atomically: YES ]/' 问题是我每次都必须进入完整路径。我最好有一个它经常使用的目录。所以我试了一下: command regex logImageFile 's/(.+)

我正在尝试编写一个lldb别名,用于将图像写入文件。以下各项工作正常,但存在一个问题:

command regex logImageFile 's/(.+) (.+)/ expr (int) [ (id)UIImagePNGRepresentation(%1) writeToFile: @"%2.png" atomically: YES ]/'
问题是我每次都必须进入完整路径。我最好有一个它经常使用的目录。所以我试了一下:

command regex logImageFile 's/(.+) (.+)/ expr (int) [ (id)UIImagePNGRepresentation(%1) writeToFile: @"/users/myUsername/Desktop/tempImages/%2.png" atomically: YES ]/'
现在,当我在Xcode控制台中输入如下内容时,lldb总是说logImageFile不是有效的命令

logImageFile fooImage barFile

问题很可能是路径中的斜线。我想我得设法逃离他们,但怎么逃呢?请注意,我在lldb正则表达式中有一个NSString,但我不知道它实际上是什么风格的正则表达式。

我认为问题在于您使用了
/
字符来分隔正则表达式的各个部分,而该字符也出现在文件路径中的替换文本中。最简单的修复方法是使用不同的分隔符。
s//
格式是最常见的格式,但您可以同样轻松地使用
s###
。e、 g

(lldb) command regex logImageFile 's#(.+) (.+)#expr (int) puts("[ (id)UIImagePNGRepresentation(%1) writeToFile: @\"/users/myUsername/Desktop/tempImages/%2.png\" atomically: YES ]")#'
(lldb) logImageFile fooImage barFile
(int) $1 = 10
[ (id)UIImagePNGRepresentation(fooImage) writeToFile: @"/users/myUsername/Desktop/tempImages/barFile.png" atomically: YES ]
我告诉
expr
这里返回类型是
(int)
,所以它正在打印(将它分配给便利变量
$1
)-但是如果使用
(void)
,它将避免打印任何内容


我在这里使用的是
put()
,而不是您试图设置的实际调用-但我想我发现了您原来的正则表达式命令别名的问题。试试看。

我认为问题在于您使用了
/
字符来分隔正则表达式的各个部分,并且该字符也出现在文件路径中的替换文本中。最简单的修复方法是使用不同的分隔符。
s//
格式是最常见的格式,但您可以同样轻松地使用
s###
。e、 g

(lldb) command regex logImageFile 's#(.+) (.+)#expr (int) puts("[ (id)UIImagePNGRepresentation(%1) writeToFile: @\"/users/myUsername/Desktop/tempImages/%2.png\" atomically: YES ]")#'
(lldb) logImageFile fooImage barFile
(int) $1 = 10
[ (id)UIImagePNGRepresentation(fooImage) writeToFile: @"/users/myUsername/Desktop/tempImages/barFile.png" atomically: YES ]
我告诉
expr
这里返回类型是
(int)
,所以它正在打印(将它分配给便利变量
$1
)-但是如果使用
(void)
,它将避免打印任何内容


我在这里使用的是
put()
,而不是您试图设置的实际调用-但我想我发现了您原来的正则表达式命令别名的问题。试一试。

这么简单的解决方案,我不知道我已经试了多久了。这么简单的解决方案,我不知道我试了多久了。