经过大量的Google搜索,在此处询问问题。我希望能够搜索一个字符串来验证一个字先于另一个字(在php中),但不一定相邻。我很确定这很简单,但努力寻找答案!搜索字符串中的两个单词以验证一个单词在另一个单词之前
回答
如果这是唯一的要求,那么也许:
if(($pos = strpos($haystack, $first_word)) !== false && strpos($haystack, $second_word, $pos)) {
// $second_word found after $first_word
}
你可以试试这个:
if (preg_match('~^(?>[^bg]+|\B[bg]|b(?!adword\b)|g(?!oodword))*+\bgoodword\b~', $str, $match))
echo 'ok';
else
echo 'fail';
你必须采取的"badword"
的第一个字母( “B”),并允许它仅在没有后面跟着"adword"
^
是字符串开头的锚点
\b
是字边界和\B
是相反的。
(?!...)
意味着 “不跟”
与存储到变量一些文本的例子:$text_before
,$text_after
$flb = preg_quote($text_before[0]);
$fla = preg_quote($text_after[0]);
$subb = substr($text_before, 1);
$suba = substr($text_after, 1);
if(preg_match('~^(?>[^' . $flb . $fla . ']+|\B[' . $flb . $fla ']|'
. $flb . '(?!\Q' . $subb . '\E\b)|'
. $fla . '(?!\Q' . $suba . '\E\b))*+\b'
. $text_after . '\b~', $str, $match)) {
echo 'ok';
} else {
echo 'fail';
}
谢谢!再一次,stackoverflow被证明是最有用的资源。我确实使用下面的代码来工作,但不相信它是健壮的。 preg_match(“/ \ b(”。$ textBefore。“|”。$ textAfter。“)\ b /”,$ this-> response)您的解决方案看起来更健壮,所以会试用。 – jaffamoney
@ user2686371:我已经更新了我的答案,因为我已经忘记了我的模式中的某些内容,并且已经添加了此技术的代码示例。 –
也许这
# ^(?:(?!word_after).)*word_before(?:(?!word_after|word_before).)*word_after(?:(?!word_before).)*$
^
(?:
(?! word_after)
.
)*
word_before
(?:
(?! word_after | word_before)
.
)*
word_after
(?:
(?! word_before)
.
)*
$
起初我还以为要建议你使用strpos(),但如果你需要匹配确切的单词,它可能无法工作。我调查的东西是这样的:
function AbeforeBinC($a, $b, $string)
{
$aStr = explode(' ', strtolower($string));
foreach($aStr AS $k => $s)
{
if($a == $s){ $a = $k; }
if($b == $s){ $b = $k; }
}
var_dump($a < $b);
}
$str = "We are here to take care of you";
AbeforeBinC('are', 'take', $str);
- 1. 在swift中搜索一个字符串中的多个单词
- 2. 在另一个单词之前或之后获取单个单词
- 3. Preg_match找到一个单词之后的单词和另一个单词
- 4. 单个单词搜索从一个单元格中的多个单词的CSV
- 5. 如何在单词中搜索句子的第一个单词
- 6. 用另一个词替换单词的从字符串在python
- 7. 如何将字符串从一个单词分解到另一个单词?
- 8. 替换单词在搜索词之前
- 9. 字符串中的一个单词替换单词
- 10. 如何找到一个单词之前没有另一个特定的单词?
- 11. MySQL搜索一个字母的单词
- 12. 从另一个文件搜索单个文件中的单词
- 13. 搜索字串中每个单词的第一个字母的谓词
- 14. 在字符串(JavaScript)中搜索单个单词(在变量中)
- 15. 如何在一个SQL Server表中的单词内搜索一个单词
- 16. 从一个列表中过滤单词和另一个单词
- 17. 我想在第一个单词之后插入一个单词
- 18. php - 如何在字符串中的两个单词之间插入单词?
- 19. 查找字符串中的单词之后的下一个单词
- 20. 在Mysql中多行搜索多个单词和单个词php
- 21. 如何搜索字符串中的单词(只是单词)?
- 22. 在ruby的最后一个单词之前添加一个单词
- 23. 在C#中搜索字符串中每个单词的前几个字符
- 24. grep匹配一个单词,但不匹配另一个单词
- 25. 在Ruby中搜索单个单词和组合单词
- 26. C从两个单词之间的字符串中提取单词
- 27. 选择两个单词之间的词
- 28. 如果子字符串在一个单词中,得到单词之前的索引值
- 29. 从字符串中的一组单词中出现一个单词
- 30. Solr - 一个单词词组搜索,以避免干扰
但是,这还通过是否存在之后的第二'“第一第二首”重复第一个字'我想你可以建仓的阵列,每个字,然后对它们进行排序然后逐个比较元素。或者,您可以使用正则表达式。 – sln
这不是一个要求。需要更多的规则来扩展这一点。 “第二个第一秒”怎么样? – AbraCadaver
是的,为了覆盖边缘条件,它很难'^(?:(?!second)。)* first(?:(?!second | first)。)* second(?:(?! first)。)* $' – sln