我对使用Qt QRegExp捕获文本感到困惑。我想从PHP代码中获取数据很简单:
public function asr($x)
{
echo "index";
}
说明:
public function <can be more spaces or new lines...> asr($x) <can be more spaces or/and new lines or/and tabs...>
{
echo "index";
}
我想从PHP文件中获取什么?这是一个......
public function asr($x)
{
我现在如何被抓住?
QRegExp reg("(public|private|protected|static|final)(.*)function(.*)[\(](.*)[\)](.*)[\n](.*)[\{]", Qt::CaseInsensitive);
说明:
当我尝试添加[\{]
或(\{)
从PHP文件中获取大括号时,它不会获取数据:
仅限结果:
public function asr($x)
相反:
public function asr($x) {
注意:($x)
和{
之间可以是换行符\n
,也可以是\s
。
这将是(\))(\n|\s)
,但没有运气:(
if (file.open(QIODevice::ReadOnly))
{
QTextStream in(&file);
// regex for function with new line
QRegExp reg("((.*)public|private|protected|static|final)( *)function(.*)[(](.*)", Qt::CaseInsensitive);
// capture to list
QStringList list = reg.capturedTexts();
qDebug() << list;
while ( !in.atEnd() )
{
QString line_read = in.readLine();
//qDebug() << line_read; // read lines
qDebug() << reg.exactMatch(line_read); // find matches
}
}
}
FINAL RESULTS:
false
false
false
false
false
false
false
false
true // means found on this line for QRegExp policies
false
false
false
false
true
false
false
false
false
true
false
false
false
false
true
false
false
false
false
false
false
false
答案 0 :(得分:1)
您必须在\\
内使用""
作为反斜杠。
编辑:
您也不必在(){
[]
QRegExp function("(public|private|protected|static|final)( *)function(.*)[(](.*)[)](.*)[{]", Qt::CaseInsensitive);
auto b = function.exactMatch( "public function ($d) \n {" );
b = function.exactMatch( "public function ($d){" );
适合我。空格由(.*)
答案 1 :(得分:0)
我知道什么是问题,逐行读取而不是文件中的所有行,然后应该替换文件中的文本。我不应该使用in.readLine()
来阅读文件,所以我在这一行找到了{
,但因为大括号{
在下一行而不存在!