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

时间:2012-04-04 18:07:19

标签: regex

有什么问题:

/(?<={).+(?=public)/s

全文

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:

};

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

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

3 个答案:

答案 0 :(得分:11)

你想要一个懒惰的比赛:

/(?<={).+?(?=public)/s

另见:What is the difference between .*? and .* regular expressions?
(我也回答,似乎)

答案 1 :(得分:1)

我认为你需要这个:

(?s)(?<={).+?(?=public)

它就像波希米亚人发布的答案一样,但是很懒,所以它符合你想要的。

答案 2 :(得分:0)

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

(?s)(?<={).+?(?=public)

regex bible引用,(?s)开关表示:

  

为正则表达式的其余部分启用“dot matches newline”。

请注意,正则表达式周围的斜线与正则表达式无关 - 这是一种语言事物(perl,javascript等),与实际问题无关