【发布时间】:2014-06-18 21:36:59
【问题描述】:
我正在尝试搜索句子中的某些单词(使用 PHP)。无论出于何种原因,这些词可能会被空格分开。 (例如 'alpha betical' 而不是 'alphabetical')。出于某种原因,我正在将该句子中除以空格的每组字符分别与某个正则表达式进行比较。因此,我无法将 'alpha betical' 与 'alphabetical' 匹配,因为它会尝试分别匹配 'alpha' 和 'betical'。不过,'alpha' 确实部分匹配正则表达式('alphabetical');如果添加“betical”,它将匹配。
我需要像 Java 的 Matcher.hitEnd() 这样的东西。 (如果在此匹配器执行的最后一次匹配操作中搜索引擎命中了输入的结尾,则返回 true。 当此方法返回 true 时,有可能更多的输入会改变上次搜索的结果。)This question 提出了同样的问题,再加上一点,但没有适当的答案。我发现this question 得到了回答,但只提供了适用于 Java(在本段开头提到)而不是 PHP 的解决方案。
基本上,如果我将'alpha' 与'/alphabetical/' 匹配,我想告诉我它至少匹配正则表达式的一部分。 (我知道在这种情况下,我可以切换它们并将alphabetical 与'/^alpha/' 匹配,但是当我使用它时,正则表达式'/alphabetical/' 会稍微复杂一些,因此不适合切换。 . 想象一下'/[Aa]lpha-?betical(ly)?|[Ll]exicographical(ly)?/')
我知道正则表达式不能部分工作,只有匹配或没有匹配。有没有办法得到我想要的,或者我必须以完全不同的方式解决我的问题?
【问题讨论】:
-
如果您要进行部分匹配,您的表达式会匹配几乎所有内容吗?与您的
alphabetical示例一样,您希望它与字母a部分匹配,对吗?我认为更好的方法是从输入中删除所有空格,然后搜索完整的字符串。 -
好的。我明白了。我用另一个想法更新了我的答案。考虑实现一个通配符字符串函数,如 SQL 的“LIKE 'alpha^'”,它根据匹配长度返回匹配项。很容易指定最小长度/分数以符合匹配条件。