当指定正则表达式时应该小心:正则表达式的一些格式可能涉及查找最佳匹配的大量工作,反过来影响性能。其他表达式可能会产生不期望的结果。
例如,要将文本至多与定界符字符‘;’匹配并包括它,不要使用模型“.*;”,因为这至多与消息中的最后一个‘;’字符(包括所匹配文本中任何以前的‘;’字符)匹配。而应该使用模型“[^;]*;”。
同样地,避免使用模型“.*”,因为总是会强制搜索消息的结束处以尝试并查找最佳匹配,并且这可能导致较差的性能。然而,如果打算与消息中的所有剩余数据匹配,应该使用模型“.*”。
要获得最佳性能,避免具有冗余嵌套重复的表达式,如“([0-9]+)*”。尝试用精确匹配条件使表达式保持简单。这就避免需要执行对最佳匹配的多次搜索。