QT——正则表达式

1、构造函数:QRegExp::QRegExp(const QString & pattern, Qt::CaseSensitivity cs = Qt::CaseSensitive, PatternSyntax syntax = RegExp)

/* 用给定的 pattern 构造一个正则表达式,如果语法模式syntax 是Wildcard,pattern必须使用通配符,默认的syntax(语法)是 RegExp,pattern大小写敏感,cs 是 Qt::CaseInsensitive */

------------------------------------------------------------

2、正则表达式验证器构造函数:QRegExpValidator(const QRegExp & rx, QObject * parent = 0)

/* Constructs a validator with aparentobject that accepts all strings that match the regular expressionrx.(接受和正则表达式rx匹配的所有字符串)*/

------------------------------------------------------------

3、Example of use:

// regexp: optional '-' followed by between 1 and 3 digits
QRegExp rx("-?\\d{1,3}");
QValidator *validator = new QRegExpValidator(rx, this);

QLineEdit *edit = new QLineEdit(this);
edit->setValidator(validator);

4、基本语法

1)一元字符 
.  匹配任意单个字符。例如:1.3 可能是1.  后面跟任意字符,再跟3 
^  匹配字符串首。例如:^12可能是123,但不能是312 
$  匹配字符串尾。 例如:12$可以是312,当不能是 123 
[] 匹配括号内输入的任意字符。[123]可以为1, 2 或3 
*  匹配任意数量的前导字符。 例如, 1*2可以为任意数量个1(甚至没有), 后面跟一个2 
+  匹配至少一个前导字符。 例如, 1+2必须为一个或多个1,后跟一个2 
?  匹配一个前导字符或为空。例如 1?2可以为2或这12

----------------------------------------------------------------------------

2)通配符模式 : QRegExp::setPatternSyntax(QRegExp::Wildcard);可以将元字符设置为统配模式。在统配模式下,只有3个元字符可以使用,功能没有变化.。

?   匹配任意单个字符。 例如:1?2可以为1,后面跟任意单个字符, 再跟2 
*   匹配任意一个字符序列。 例如:1*2, 可以为1,后面跟任意数量的字符,再跟一个2 
[]  匹配一个定义的字符集合。 例如: [a-zA-Z.]可以匹配 a到z之间任意一个字符, [^a]匹配除小写a以外的字符。

3)转义序列 
.   匹配”.” 
^  匹配”^” 
$   匹配”$” 
[ 匹配"[" 
] 匹配”]” 
*   匹配”*” 
+   匹配”+” 
?   匹配”?” 
制表符号 
换行符号 
回车符 
s   任意空格 
xnn 匹配16进制为nn的字符 
nn  匹配8进制的nn字符 


### QT正则表达式头文件报错解决方案 当遇到QT正则表达式的编译或语法错误时,通常是因为缺少必要的头文件引入或是配置不正确。以下是详细的解决方法: #### 1. 确认头文件包含路径 确保项目中的`.pro`文件已经包含了Qt的Core模块,因为QRegularExpression类位于QtCore库中。 ```qmake QT += core ``` 如果使用的是CMake构建系统,则应在`CMakeLists.txt`中添加如下内容: ```cmake find_package(Qt5 COMPONENTS Core REQUIRED) target_link_libraries(your_project_name Qt5::Core) ``` #### 2. 使用正确的命名空间和导入声明 在源代码顶部应有相应的using namespace声明或者显式指定全限定名来访问Qt提供的APIs. ```cpp // Option A: Using directive at file scope #include <QRegularExpression> using namespace Qt; // Or option B: Fully qualified name usage within function body QString pattern = QRegularExpression("\\d+"); ``` 注意,在大多数情况下推荐采用第二种方式即完全限定名称的方式调用,这有助于避免潜在的名字冲突问题[^1]. #### 3. 检查编译器版本和支持情况 对于某些较老版本的GCC/Clang可能无法很好地支持C++11特性下的正则表达式实现;因此建议升级至最新稳定版编译工具链,并确认启用了对C++11标准的支持选项(-std=c++11). 另外需要注意的是,不同操作系统平台上的默认字符编码也可能影响到程序行为,特别是在处理多字节字符串匹配模式的时候更需谨慎对待[^2]. #### 4. 验证输入数据合法性 有时开发者可能会忽略掉一些边界条件测试而导致运行期异常抛出。比如传入非法参数给构造函数造成内部状态损坏等问题。所以在实际开发过程中应当充分考虑各种可能性并做好相应防护措施。 最后提醒一点就是关于跨平台移植性的考量——尽管Qt框架本身具有良好的兼容性保障机制,但在涉及到具体第三方库集成方面还是应该仔细阅读官方文档说明以及社区反馈意见以便及时调整策略适应变化需求[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值