9

出什么问题了 :

/(?<={).+(?=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
4

3 回答 3

14

你想要一个惰性匹配:

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

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

于 2012-04-04T18:10:48.547 回答
1

我认为你需要这个:

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

它就像 Bohemian 发布的答案,但它很懒,所以它符合你想要的。

于 2012-04-04T18:13:51.210 回答
1

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

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

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

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

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

于 2012-04-04T18:08:56.267 回答