匹配优先存在的问题,以及解决办法

1、匹配优先存在的问题,考虑下面的情况: The name "dumpling" is said "jiaozi" in Chenese.  我们想要匹配 双引号引起来的单词,这里也就是 dumpling和jiaozi。

使用 ".*" ,出现什么问题? "匹配第一个双引号,.* 量词优先匹配,一直吃下去,迟到最后的e,导致后面匹配失败(也就是全局匹配失败),因此要吐出来,一次吐出一个,尝试一下,失败了再吐出一个,直到jiaozi"后面的"匹配成功,return。 这当然不是我们预期的结果,怎么办?

2、这里错误的原因是,".*" 匹配了双引号的中的任意文本,这不是我们的意图,应该是匹配除了"之外的任意文本。那么我们使用 排除型字符组。如下:"[^"]*" ,注意排除型字符组的含义是:匹配一个字符,这个字符是除了"以外的任意字符。

3、现在考虑下面的场景:<B>Andy</B><B>Bill</B> ,要匹配<B></B>中的人名,我们使用 <B>[^</B>]*</B>,这存在问题:[^</B>]不是表示除了 "</B>"以外的字符,而是匹配一个字符,这个字符是除了 < / B >以外的字符,也就是说等价于 [^<>B/],[^</B>]*就是匹配任意多个字符,字符中不包含 < / B >。这不是我们的意图,怎么解决这个问题?

4、这里错误的原因是:量词匹配优先,也就是会多吃。我们知道正则表达式匹配过程中,会有回溯。对于量词,无论是匹配优先还是忽略优先,都要为全局匹配服务。当全局匹配失败的时候,都要回溯。对于匹配优先,多吃的要吐出来,对于忽略优先,少吃的再吃下去。解决办法是量词忽略优先,尽量少吃。如下:<B>.*?</B>。

5、还有没有其他的解决办法?

时间: 2024-11-11 22:45:22

匹配优先存在的问题,以及解决办法的相关文章

使用union all查询时字段不匹配解决办法

小问题,可能新手碰到也会被书上的定义限定思维,一时反应不过来. 定义: UNION 或UNION ALL 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每条 SELECT 语句中的列的顺序必须相同. 场景: 当两个select的结果集个别字段有差别时需要UNION 或UNION ALL 合并. 解决办法: 某个结果集少字段可以用空值或固定值代替,使用别名达到列名一致要求. 如 要合并s

mysql like 匹配查询出不正确中文的解决办法

本文讲述mysql使用like语句时,匹配查询出不正确中文的解决办法 mysql like 搜索的时候发现,用 select title from tb_name where title like '%a%' 的时候出来的结果除了包含a的名字外连包含中文“新”的名字也出现在搜索结果里面,这令我想弄清楚mysql的匹配模式和规则到底是怎么样的,另外在匹配的时候正则表达式也很常用! 出现这个问题的原因是:MySQL在查询字符串时是大小写不敏感的,在编绎MySQL时一般以ISO-8859字符集作为默认

关于发布WP 8.1应用信息不匹配问题的解决办法

错误提示: ? 与此更新关联的程序包标识符与已上传程序包中的标识符不匹配: The package identity associated with this update doesn't match the uploaded appx 解决办法: 1,进入开发者中心仪盘表,点击正在提交的应用名,点击详细信息 中文界面: 英文界面: 2,在Package.appxmanifest文件中做如下的配置: 3,重新生成安装包,提交. ? 其他搜索结果: ? 我本身就小白,根据这些搜索到的"答案&quo

wps excel VLOOKUP匹配不出来 不起作用 无效 #N/A不显示的解决办法

wps excel VLOOKUP函数不起作用 无效 #N/A不显示 匹配不出来的解决办法首先如果查找的值在查找范围不存在会显示#N/A,另外检查下是否有空格等其他字符导致两边数据不一致.如果确定数据存在且数据一致,那可能就是数据类型不一样导致的,我们主要讲这个问题.我用的WPS,选择单元格点击右键可以设置单元格格式,但是不会这么简单,两边同时设置为文本或数字都不行,因为设置单元格个时候里面的内容不会变,需要双击一下才变过来.如下图中D列我全部设置成数值以后,再双击才会像第一个那样转换为数值格式

IntelliJ IDEA代码编码区提示库源不匹配字节码解决办法

在使用IntelliJ IDEA进行开发时,可能会在代码编辑区出现此提示:library source does not match the bytecode for class HelloWorld(HelloWorld你创建的类) 解决办法:删除已经导入的jar包.重新导入jar包 具体操作步骤:点击File->Project Structure...->Dependencles->+

Django模型迁移提示版本不匹配解决办法

Django迁移模型时提示django.core.exceptions.ImproperlyConfigured:mysqlclient 1.3.7 or newer is required; you have 0.9.3.错误解决办法 造成此错误提示是以为mysql服务器版本与Django内置的版本不一样造成的,可以通过修改源码的方式取消比对即可正常运行! 源码文件路径:你的虚拟环境目录下的lib目录下python工具包里面:比如的我python环境为dj_xm31,虚拟机位置在当前用户的.v

经测试稳定可用的蓝牙链接通信Demo,记录过程中遇到的问题的思考和解决办法,并整理后给出一个Utils类可以简单调用来实现蓝牙功能

说明:这是本人在蓝牙开发过程中遇到过的问题记录和分析,以及解决办法. 在研究过程中,许多的前人给出的解决方案和思路指导对我相当有帮助,但并非都是可采取的解决方法, 经过本人对这些方法的测试和使用过后,给出自己的理解和解决方案,不一定是正确的,但这些方法的确可以解决问题. 如果有人遇到同样的问题,并且看到我的文章解决,那是我的荣幸. !!!!!!但特别需要说明的是,看的越多,不明白的越多,我的看法可能是完全错误的,这些方法只是暂时解决了我的问题, !!!!!!如果有人发现了我的错误,请私信或评论告

vs调试断点进不去的解决办法

原创文章,禁止转载. 断点进不去的解决办法:  确认是debug版本  确认生成了调试信息  确认在编译和连接的工程配置中指定了相同的匹配的pdb文件名,而不是默认的vc100.pdb等名字(无关)  确认pdb和dll/exe放在了一起(貌似有时候在生成路径中不动也行)  确认dll和pdb是匹配的,同时生成的  清理整个解决方案,重新编译  确认默认工程是exe而不是dll  确认工程目录中不带中文  还是不行?让你的老板找比尔盖茨挖人吧! 原创文章,禁止转载.

ASP.NET中引用dll“找不到指定模块&quot;的完美解决办法 z

DllImport是System.Runtime.InteropServices命名空间下的一个属性类,其功能是提供从非托管DLL导出的函数的必要调用信息.DllImport属性应用于方法,要求最少要提供包含入口点的dll的名称.DllImport的定义如下: [AttributeUsage(AttributeTargets.Method)] public class DllImportAttribute: System.Attribute { public DllImportAttribute