Styne666 は正しい正規表現を提供しました。
これは、最初の引数をこの正規表現と一致させようとする小さな Perl スクリプトです。
#!/usr/bin/env perl
use strict;
use warnings;
my $arg = shift;
if ($arg =~ m/(#(?=\d*[a-zA-Z])[a-zA-Z\d]{2,})/) {
print "$1 MATCHES THE PATTERN!\n";
} else {
print "NO MATCH\n";
}
Perl は、正規表現をすばやくテストするのに最適です。
さて、あなたの質問は少し異なります。テキスト文字列内のすべての部分文字列を検索する必要があり、それを C++/Qt で実行したいと考えています。これが私が数分で思いつくことができるものです:
#include <QtCore/QCoreApplication>
#include <QRegExp>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
QString str = argv[1];
QRegExp rx("[\\s]?(\\#(?=\\d*[a-zA-Z])[a-zA-Z\\d]{2,})\\b");
int pos = 0;
while ((pos = rx.indexIn(str, pos)) != -1)
{
QString token = rx.cap(1);
cout << token.toStdString().c_str() << endl;
pos += rx.matchedLength();
}
return 0;
}
テストを作成するために、次のような入力を与えます (長い文字列を 1 つのコマンド ライン引数にします)。
peter@ubuntu01$ qt-regexp "#hjhj 4324 fdsafdsa #33e #22"
そして、 #hjhjと#33eの 2 つの単語のみに一致します。
それが役に立てば幸い。