问题标签 [pattern-matching]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - Javascript字符串模式验证
我有一个字符串,我想验证该字符串,以便它不能包含某些字符,例如 '/' '\' '&' ';' 等等...我怎样才能一次验证所有这些?
scala - 这个案例类匹配模式是如何工作的?
我刚刚在 Scalaactors
包中看到了这个案例类:
在 JavaDoc 中,它以以下形式描述了用法:
为什么不是这样:
是bang算子!与以冒号结尾的方法类似的特殊情况:
jquery - jQuery 通过 ID 过滤,然后捕获匹配项
我发现自己在重复这样做。
所以我想对一些按钮应用点击事件,在点击事件处理程序中我需要用户 ID。有没有办法避免第二场比赛?
谢谢。
c++ - 具有简单通配符支持的快速字符串匹配算法
我需要使用简单的通配符支持将输入字符串 (URL) 与一大组字符串规则(从 1k 到 250k 不等)进行匹配。
通配符支持的要求如下:
通配符 (*) 只能替换 URL 的“部分”。那是域、路径和参数的片段。例如,“*.part.part/*/part?part=part&part=*”。此规则的唯一例外是在路径区域中,“/*”应该匹配斜杠之后的任何内容。
例子:
- *.site.com/* -- 应该匹配 sub.site.com/home.html, sub2.site.com/path/home.html
- sub.site.*/path/* -- 应该匹配 sub.site.com/path/home.html、sub.site.net/path/home.html,但不匹配 sub.site.com/home.html
其他要求:
- 快速查找(我意识到“快速”是一个相对术语。考虑到最大 250k 规则,如果可能的话,仍然在 < 1.5s 内。)
- 在现代桌面范围内工作(例如,不是服务器实现)
- 给定输入字符串返回 0:n 匹配的能力
- 比赛将附加规则数据
诸如此类任务的最佳系统/算法是什么?我将使用 C++ 开发解决方案,并将规则本身存储在 SQLite 数据库中。
sql - 在 SQL 中查找相似值的高性能技术?
所以我在表中有一个包含字符串值的列(从第 3 方工具填充的关键字)。我正在开发一种自动化工具来识别可能被标准化为单个值的相似值的集群。例如,“Firemen”/“Fireman”、“Isotope”/“Asotope”或“Canine”/“Canines”。
一种计算 levenshtein 距离的方法似乎是理想的,除了它涉及太多的字符串操作/比较并且可能对 SQL 索引的使用不佳。
我考虑过按列的 Left(X) 字符进行增量分组,这是最大化索引使用的一种不错的方法,但这种方法实际上只在查找单词末尾有差异的单词时才有效.
任何人都有一些好的想法可以在 SQL 中有效地解决这个问题?
注意:我意识到这个问题与(查找两个字符串有多相似)非常相似,但这里的区别是需要在 SQL 中有效地执行此操作。
string - 通过转换为数字的字符串匹配技术?
我有各种长度的字符串,其中充满了 Base64 字符。实际上,它们是音频识别数据,因歌曲而异。
为了轻松比较这些字符串的各个部分,我将它们分成 16 个字符的子字符串。(大约是一首歌的 1 秒)但在某些情况下,我无法直接比较这些。我应该测量它们。
例如与 ' hellohellohelloo
' 和 ' hallohellohelloo
' 的比较应该得到更接近的值然后 ' hellohellohelloo
' 和 ' herehellohelloo
' 比较。
有没有算法或理论
编辑:对不起,我是新来的 :) 我无法说清楚。这里有一些评论会让我清楚并提出一个想法。
评论1:
实际上我知道 Levenshtein 距离,但问题是每次我比较两个字符串时,我都必须建立比较矩阵,这使得搜索过程变慢。例如,如果我可以将 hello 转换为 4444 并将 halo 转换为 4443,我可以通过索引数值来确定我对“hello”的记录有多接近。
评论 2:
也许我应该确定一个基本的恒定长度字符串并将它们的距离值存储为字符串的索引值。这只是一个想法?!
haskell - 模式匹配相同的值
我只是想知道是否可以使用函数式编程语言(Haskell/F#/Caml)的模式匹配工具多次匹配相同的值。
想想下面的例子:
当使用两个相似的值(将存储在 中a
)调用函数时,将调用第一个变体。
这是一个更有用的应用程序(简化 AST)。
但是 Haskell 拒绝这些代码并警告我冲突的定义a
- 我必须做明确的 case/if-checks 来确定函数是否有相同的值。有什么技巧可以表明我要匹配的变量会出现多次吗?
regex - 组合正则表达式 - 将正则表达式分解为可读形式
我正在阅读 Martin Fowler 撰写的一篇关于Composed Regular Expressions的文章。这是您可以使用如下代码的地方:
并把它分解成更像这样的东西:
或这个:
甚至这样:
这听起来很容易做到,并且可能有一些好处。我绝不是一个“正则表达式的人”,并且经常发现自己在网上搜索以找到我需要的正则表达式,而不是花时间为自己编写它。找到适合给定问题的正则表达式后,我将其复制并粘贴并对其进行测试以确保它与宣传的一样。然后我可能会发表评论来描述它的作用。但后来我开始了生活中更大更好的事情。
我想知道以 Martin Fowlers 讨论中描述的方式打破正则表达式模式是否真的会让事情比评论更容易理解?归根结底,您的代码中仍然有一个丑陋的正则表达式,只是现在它有很多部分。如果您需要扩展该表达式……这如何帮助您真正理解正则表达式的作用?
我知道所有顽固的 perl 人都喜欢他们的正则表达式模式。但是对于那些在每个其他项目(问题)中不多次处理正则表达式的人来说,您是否发现将正则表达式模式分解成更小的位或多或少的可读性?有没有人在项目中使用过这个概念并发现它很有用?...没用处?
math - Haskell浮点错误
所以我已经完成了在 haskell 中创建自己的复数数据类型。
多亏了这里的另一个问题,我也得到了一个可以求解二次方程的函数。
现在唯一的问题是,当尝试求解具有复根的二次方时,代码会在拥抱中生成解析错误。
即拥抱...
在应用平方根后,它看起来像是一个问题,但我真的不确定。任何试图找出问题所在的帮助或任何有关此错误意味着什么的迹象都将非常出色。
谢谢,
托马斯
编码:
algorithm - 线性模式匹配的算法?
我有一个零和一的线性列表,我需要匹配多个简单模式并找到第一个匹配项。例如,我可能需要在长度为 800 万的列表中查找0001101101
、01010100100
、 OR 。10100100010
我只需要找到其中任何一个的第一次出现,然后返回它出现的索引。但是,对大列表进行循环和访问可能会很昂贵,我宁愿不要这样做太多次。
有没有比做更快的方法
编辑:顺便说一句,我已经按照上面的伪代码实现了这个程序,性能还可以,但没什么了不起的。我估计我在处理器的单个内核上每秒处理大约 600 万位。我用它来处理图像,它必须处理几千张 8 兆像素的图像,所以每一点都有帮助。
编辑:如果不清楚,我正在使用一个位数组,所以只有两种可能性:一个和零。它是用 C++ 编写的。
编辑:感谢 BM 和 KMP 算法的指针。我注意到,在 BM 的维基百科页面上,它说
该算法预处理正在搜索的目标字符串(键),而不是正在搜索的字符串(与一些预处理要搜索的字符串然后可以通过重复搜索来分摊预处理费用的算法不同)。
这看起来很有趣,但它没有给出此类算法的任何示例。类似的东西也会有帮助吗?