我使用的EditPad Pro文本编辑器。 我需要读字符串转换成代码,但我需要忽略那些与标签开始“/ *”或标签+ / *,例如:
/**
* Light up the dungeon using "claravoyance"
*
* memorizes all floor grids too.
**/
/** This function returns TRUE if a "line of sight" **/
#include "cave.h"
(tab here) /* Vertical "knights" */
if (g->multiple_objects) {
/* Get the "pile" feature instead */
k_ptr = &k_info[0];
}
put_str("Text inside", hgt - 1, (wid - COL_MAP) / 2);
/* More code*** */
我想回:
"Text inside"
我也试试这个(读为不带序列开始的字符串正则表达式 ),但对我来说不是工作:
^(?! \*/\t).+".*"
任何帮助吗?
编辑 :我使用:
^(?!#| |(\t*/)|(/)).+".*"
它返回:
put_str("Text inside"
我接近找到解决办法。
的EditPad明显支持可变长度的回顾后在专业版6和精简版的版本7,因为它的味道被表示为“JGsoft” : 好了软件正则表达式引擎 。
知道了这一点,并在不使用捕捉组 ,你可以将两个可变长度lookbehinds :
(?<!^[ \t]*/?[*#][^"\n]*")(?<=^[^"\n]*")[^"]+
-
(?<!^[ \t]*/?[*#][^"\n]*")
用于避免引述部分通过前面的负回顾后[ \t]*/?[*#]
任何意见,这可以通过空间/选项卡的任何量之前。 在制造/
可选的,因为一个多行注释也可以启动*
。 -
(?<=^[^"\n]*")
用于确保阳性回顾后,即有任何量的[^"\n]
, characters, that are no quotes or newlines
接着前一个报价。 -
[^"]+
作为应该总是平衡的报价,现在应该是方便的,相匹配的non-quotes
后的第一个double-quote
(这是回顾后内) - 如果单个
"
可以以任何线(未均衡)发生,更改结束: [^"]+
,以[^"\n]+(?=")
也许有对这个问题的不同解决方案。 希望能帮助到你 :)
这里有一个方法: ^(?!\t*/\*).*?"(.+?)"
分解:
^(?!\t*/\*) This is a negative lookahead anchored to the beginning of the line,
to ensure that there is no `/*` at the beginning (with or
without tabs)
.*?" Next is any amount of characters, up to a double-quote. It's lazy
so it stops at the first quote
(.+?)" This is the capture group for everything between the quotes, again
lazy so it doesn't slurp other quotes
你可以使用这个表达式:
/\*.*\*/(*SKIP)(*FAIL)|".*?"
工作演示
编辑:如果你使用的EditPad那么你可以使用这个表达式:
"[\w\s]+"(?!.*\*/)