我有一个正则表达式,用于匹配表格的表达式 (val1 operator val2)
这个正则表达式看起来像:
(\(\s*([a-zA-Z]+[0-9]*|[0-9]+|\'.*\'|\[.*\])\s*(ni|in|\*|\/|\+|\-|==|!=|>|>=|<|<=)\s*([a-zA-Z]+[0-9]*|[0-9]+|\'.*\'|\[.*\])\s*\))
正如您在本演示中看到的那样,这实际上很好,并且与我想要的匹配
但是:D(黄油来了)
我想通过使其更易读和“紧凑”来优化正则表达式本身。我搜索了如何执行此操作,然后找到了一种称为反向引用的名称,您可以在其中命名捕获组,然后像下面这样引用它们:
(\(\s*(?P<Val>[a-zA-Z]+[0-9]*|[0-9]+|\'.*\'|\[.*\])\s*(ni|in|\*|\/|\+|\-|==|!=|>|>=|<|<=)\s*(\g{Val})\s*\))
我在其中命名了捕获表达式左侧的组,Val
后来我将其引用为(\g{Val})
,现在的 问题
是,仅在表达式左侧与右侧完全相同的情况下,您才能在此处看到此表达式!例如(a==a)
或(1==1)
,并且与(a==b)
!之类的表达式不匹配。
现在的问题是:有没有办法引用模式而不是匹配的值?
请注意,这\g{N}
等效于\1
,即, 反向引用 与相应的捕获组匹配的相同 值
(而不是模式)匹配。不过,这种语法稍微灵活一些,因为您可以通过在数字之前使用来定义 相
对于当前组的捕获组-
(即\g{-2}
,(\p{L})(\d)\g{-2}
将匹配a1a
)。
PCRE引擎允许 子例程调用
来递归子模式。要重复Group 1的模式,请使用(?1)
和(?&Val)
递归已命名group的模式Val
。
另外,您可以使用字符类来匹配单个字符,并考虑使用?
量词使正则表达式的某些部分可选:
(\(\s*(?P<Val>[a-zA-Z]+[0-9]*|[0-9]+|\'.*\'|\[.*\])\s*(ni|in|[*\/+-]|[=!><]=|[><])\s*((?&Val))\s*\))
见正则表达式演示
请注意,\'.*\'
和\[.*\]
可能匹配太多,请考虑用\'[^\']*\'
和替换\[[^][]*\]
。
我对从有序对象列表中获取子列表的Y方法感兴趣。子列表应该以一个对象开始,该对象匹配一个与它的属性相关的给定条件,它应该以一个对象匹配一个不同的条件结束。 假设我有以下类: 我需要从(包括)到(包括)的子列表,保持它在源列表中的顺序,将放在一边。 我知道如何在不使用流的情况下做到这一点(比如查找开始和结束的索引,然后将元素从index获取到index),这可能已经足够了,但有些过时,不能真正满足我对
我有一个使用stringType匹配文件名的协定。契约还指定了type上的匹配器,但当我在提供者端运行测试时,它会执行字面匹配。我在调试时包含了合同、发送的JSON和一个屏幕截图。我注意到TypeMatcher是在MatchingRuleGroup中初始化的,但它没有字段。我不确定这是否正确 我尝试了3种方案: > StringValue(“bestandSID”,“20190219_foo_20
我正在为我的博客站点使用正则表达式模式,使URL地址成为可点击的链接,这非常有效。该模式具有以下格式: 但在不久的过去,我发现这个模式也匹配文件名,所以当用户在评论中发布一些文件名时,系统会将其作为链接。您可以在此处看到这种效果: 我试图实现的是匹配除最后一个示例(见下图)之外的所有URL格式,因此或将不会突出显示。 输入应该匹配的内容: 输入不应匹配的内容: URL格式是什么样子的? 对于这种情
我尝试检查密码与功能password_verify发布的用户密码和散列从数据库。 首先,我如何生成密码和哈希: 登录时验证: 总是收到密码错误的消息。我阅读了这个php密码\u散列和密码\u验证问题没有匹配,但我手动测试了散列字符串,以验证文本字符串。 哈希字符串:$2y$10$SwSq7OukPpN/QJ8YOdKgquJQ28fQbNY1Q3JdTFnoe。2VxD/D2RXBS 通过电子邮件
我想同时执行精确的单词匹配和部分单词/子字符串匹配。例如,如果我搜索“test product”,那么我应该能够在结果中找到“test”和“product”相关的文本。我用下面的match查询搜索弹性搜索,它不是给我精确的匹配,而是给我一些更多的不确定的匹配。示例是在结果中给出与“sample”相关的文本。 我使用弹性搜索6.3 请在下面找到我的查询 搜索结果:“Hits”:[{“_index”:
问题内容: 我正在努力从我们的数据库中淘汰某个客户。我注意到一种趋势,人们用与他们填写公司名称相同的名字来填写名字。因此,示例如下所示: 这些人是我不想被查询的人。他们是坏蛋。我正在尝试将查询与WHERE语句(大概)组合在一起,以隔离姓氏至少与公司名称部分匹配的人,但是我很困惑,可以使用一些帮助。 问题答案: 您可以采用基于相似性的方法 在答案底部尝试代码 它会产生如下结果 因此,您将能够根据相似