从QRegex模式中获取字符串(作为Stringlist / arrays返回)

时间:2013-03-25 05:50:26

标签: qt4 qregexp

示例:

QFile controller_selected_file(loaded_file);

if (controller_selected_file.open(QIODevice::ReadOnly))
{
    // grab a data
    QTextStream in(&controller_selected_file);

    // read all
    QString read_data = in.readAll();

    // Regex for match function "public function something()"
    QRegExp reg("(static|public|final)(.*)function(.*)[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]", Qt::CaseInsensitive);

    // Read by regex and file
    reg.indexIn(read_data);

    QStringList data_render = reg.capturedTexts();

    qDebug() << data_render;

    qDebug() << data_render[0];
    qDebug() << data_render[1];
    qDebug() << data_render[3];

    // ...
}

我想抓住文件中显示public function somefunction()和文件中出现的另一个public function something($a,$b = "example")的文件,但我只收到第一个数组上的文件字符串或仅接收public。< / p>

所以我想抓住显示为数组的所有数据:

public function somefunction()

所以简单来说,解析文件中的所有函数名。

QRegexp表达式中正则表达式的全部功能:

(static|public|final)(.*)function(.*)[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]

编辑:我想抓取所有出现在PHP文件中的字符串。当您收到文件中的所有字符串而不是使用正则表达式定义的字符串时,会出现问题。

感谢您的尊重!

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,我认为您需要将正则表达式修改为QRegExp reg( "((static|public|final).*function.*\([\\w\\s,]*\))" );

使用上面的RegExp,您可以匹配static function newFunc( int gen_x, float A_b_c )

之类的内容
QFile controller_selected_file(loaded_file);

if (controller_selected_file.open(QIODevice::ReadOnly)) {
    // grab a data
    QTextStream in(&controller_selected_file);

    // read all
    QString read_data = in.readAll();

    // Regex for match function "public function something()"
    QRegExp reg( "((static|public|final).*function.*\([\\w\\s,]*\))" );

    // Read by regex and file
    qDebug() << reg.indexIn( read_data );
    qDebug() << reg.cap( 1 );
    // ...
}

read_data包含以下文字

"This is some text: static function newFunc( int generic, float special )
And it also contains some other text, but that is not important"

然后输出

19
"static function newFunc( int generic, float special )"

我希望这就是你想要的。