正则表达式:匹配单词的第一个匹配项

far*_*oft 5 regex

出什么问题了 :

/(?<={).+(?=public)/s
Run Code Online (Sandbox Code Playgroud)

全文

class WeightConvertor {

private:
    double gram;
    double Kilogram;
    double Tonnes;
    void SetGram(double);
    void SetKiloGram(double);
    void SetTonnes(double);
matching end

public:
    WeightConvertor();
    WeightConvertor(double, double, double);
    ~WeightConvertor();
    void SetWeight(double, double, double);
    void GetWeight(double&, double& ,double&);
    void PrintWeight();
    double TotalWeightInGram();

public:

};
Run Code Online (Sandbox Code Playgroud)

我怎么能只匹配这个文字:

private:
    double gram;
    double Kilogram;
    double Tonnes;
    void SetGram(double);
    void SetKiloGram(double);
    void SetTonnes(double);
matching end
Run Code Online (Sandbox Code Playgroud)

Kob*_*obi 12

你想要一个懒惰的比赛:

/(?<={).+?(?=public)/s
Run Code Online (Sandbox Code Playgroud)

另见:*之间有什么区别?和.*正则表达式?
(我也回答,似乎)


Boh*_*ian 1

您需要打开“点匹配换行符”开关,并且进行非贪婪 ( .*?) 匹配:

(?s)(?<={).+?(?=public)
Run Code Online (Sandbox Code Playgroud)

引用正则表达式圣经(?s)开关意味着:

为正则表达式的其余部分打开“点匹配换行符”。

请注意,正则表达式周围的斜杠与正则表达式无关 - 这是一个语言问题(perl,javascript等)并且与实际问题无关