我正在尝试在没有 or 运算符的情况下重写此代码。
if((/^\s*field\s+{\s*$/)||(/^\s*field\s+{\s*\/\/.*$/)
{
# Do something
}
我正在尝试在没有 or 运算符的情况下重写此代码。
if((/^\s*field\s+{\s*$/)||(/^\s*field\s+{\s*\/\/.*$/)
{
# Do something
}
您的规则没有很好地指定,但您可以通过简单的方式捕获这些行:
^text[1-3]
textN
这将使所有行都以where N
is one of set 的那些单词开头{1,2,3}
。这似乎最有可能基于它也可以通过正则表达式|
功能实现的事实:
^(text1|text2|text3)
但是,如前所述,规格不是那么详细,所以我们真的不知道你想要捕捉什么。您应该指定需要捕获的确切规则,而不仅仅是可能被误解的示例。
好的,在您的评论之一之后,它开始有意义:
我正在解析一个类似 C++ 的文件,我希望我的解析器同时匹配已注释和未注释的行(单行注释)。
因此,您正在寻找具有有效行尾注释的行//
或根本没有注释的行。
您评论中的关键词是“解析”。说真的,除非您知道代码非常简单,否则不要尝试使用正则表达式来执行此操作。如果要解析,则需要一个解析器。干净利落。事实上,即使是简单的代码,我也建议你应该使用解析器。
示例:您将如何处理以下完全有效的行:
int ratio = height
/
width;
char *description = "This program will look for '//' markers";
int myvar = text1 / comment;
假设您的类 C++ 语言非常简单(例如,除了行尾的注释之外没有//
其他字符),您可能只需//.$
在早期通过时去掉每行的末尾,这样就看不到注释了在以后的传球中。
但是,这对您的语法/语法有相当严格的限制,除非您可以强加,否则词法分析器/解析器是最好的方法。
如果你想重写
(/^\s*field\s+{\s*$/) || (/^\s*field\s+{\s*\/\/.*$/)
我可以建议:
m#^\s*field\s+{\s*($|//)#
最后一部分($|//)
将寻找两个有效的行尾中的任何一个:只是行尾,或两个斜杠。请注意,斜杠后面可以跟任何字符,就像您写了//.*$
.