如果在进行字符串替换/删除时在引号中,则跳过单词/短语

布鲁曼

假设我有一个这样的字符串

我今年七月从“底特律飞往温哥华”

$string = 'I am flying from "Detroit to Vancouver" this July';

我还有一个“ stopwords数组(我选择从字符串/字符串中删除的单词)

$stopwords = array( "to", "anotherstopword", "andanother" )

现在我只是在使用

$string = str_replace($stopwords, ' ', $string);

这当然给了我 string(33) "I am flying from "Detroit Vancouver" this July"

我在想也许在$string之前用一个空格爆炸str_replace,给我类似的东西

Array
(
    [0] => I
    [1] => am
    [2] => flying
    [3] => from
    [4] => "Detroit
    [5] => to
    [6] => Vancouver"
    [7] => this
    [8] => July
)

然后也许从数组中删除它们,进行替换,然后重新插入它们......但这似乎有点矫枉过正

我也考虑过使用这样的函数

  function getStringBetween($str, $from, $to, $withFromAndTo = false)
  {
      $sub = substr($str, strpos($str, $from) + strlen($from), strlen($str));
      if ($withFromAndTo)
          return $from . substr($sub, 0, strrpos($sub, $to)) . $to;
      else
          return substr($sub, 0, strrpos($sub, $to));
  }

这样做时,

    echo '<pre>';
    print_r(getStringBetween($string, '"', '"'));
    echo '</pre>';

输出:

底特律到温哥华

并在 str_replace 之前做某种类型的忽略条件..

但是只要字符串中有多个引号,就会失败。

理想情况下,如果字符串包含双引号,我想创建一个条件,以在此str_replace过程中完全忽略它们

我当然不反对使用 str_replace 以外的其他东西,比如 preg_replace,但我没有足够的经验来为我的预期输出生成样本。

任何人都可以想出一种在替换之前忽略要删除的停用词/单词的好方法吗?

编辑:

代码示例

<?php

  $stopwordstest = array( " to ", " a ", " test " );

  $string = 'I am flying from "Detroit to Vancouver" this July when the weather is test nice';

  var_dump($string);

// as is, without string replace
// string(79) "I am flying from "Detroit to Vancouver" this July when the weather is test nice" 

  $string = str_replace($stopwordstest, ' ', $string);

  echo '<br><br>';

  var_dump($string);

// string(71) "I am flying from "Detroit Vancouver" this July when the weather is nice"

// Expected output is:
//
// string(74) "I am flying from "Detroit to Vancouver" this July when the weather is nice"
//

?>

换句话说,我希望字符串替换按预期进行,但由于单词to被封装在引号 ( "Detroit to Vancouver") 中,因此应该跳过该单词,因为它是在引号中。

雷沃

使用正则表达式会很容易,使用 PHP (PCRE) 会更容易。使用 PCRE,您可以使用(*SKIP)回溯动词进行匹配和跳过您匹配一个双引号字符串,然后让引擎从整体匹配中跳过这部分,并在交替的第二侧输入您想要的模式。

"[^"\\]*(?:\\.[^"\\]*)*"(*SKIP)(*F)

上面的正则表达式匹配一个双引号字符串(包括转义的双引号),然后告诉引擎忘记。

这将是实现此功能以及在正则表达式中收集停用词的 PHP 代码:

echo preg_replace('/"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"(*SKIP)(*F)|\b(?:'
    . implode('|', array_map('preg_quote', $stopwords))
    . ')\b\h*/', '', $string);

现场演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

RegEx匹配字符串,如果在分隔符中包含特定单词

来自分类Dev

如果在将整数与字符串进行比较时返回错误的结果

来自分类Dev

如果在数组中不匹配,则从字符串中删除字符串字符

来自分类Dev

如果在数组中不匹配,则从字符串中删除字符串字符

来自分类Dev

Rails:如果在数组中,则从字符串中删除子字符串

来自分类Dev

颜色字如果在字符串中

来自分类Dev

替换字符串中的单词和短语-Javascript

来自分类Dev

Java正则表达式-如果字符串不是单词的开头,则从字符串中删除短语

来自分类Dev

将单词从字符串拆分为数组,但如果在斜线之间则不拆分

来自分类Dev

将单词从字符串拆分为数组,但如果在斜线之间则不拆分

来自分类Dev

c 字符串:如果在句子中找到一个单词,则输入 ' '

来自分类Dev

如果在R中满足条件,则使用正则表达式删除字符串中的逗号

来自分类Dev

如果在迭代时从列表中删除元素,为什么会跳过元素?

来自分类Dev

如何删除变量的字符串,如果在数组中检查它后,它与数组键不匹配?

来自分类Dev

如果在php中的字符串之间发现两个空格,如何删除一个空格?

来自分类Dev

如果在一行中找到特定模式,则查找并替换字符串

来自分类Dev

如果在列表中找到字符串,则对其进行过滤

来自分类Dev

SQL聚合方法返回字符串(如果在集合中),或任何其他字符串(如果在集合中)

来自分类Dev

从字符串中提取数字(如果在R中紧跟某些字符)

来自分类Dev

如何检查字符串中的单词或短语并将其与一组单词或短语进行比较?

来自分类Dev

颜色字符串和括号(如果在vba中其值大于0)

来自分类Dev

比较字符串,如果在SQL Server 2008中为NULL

来自分类Dev

如果在外壳程序脚本中为-else,则将参数与字符串匹配

来自分类Dev

如果在测试文件中找到字符串,如何使dos中的find命令失败?

来自分类Dev

cfquery到queryExecute:如果在SQL字符串中

来自分类Dev

如果在列中找不到字符串,則 VBA 錯誤處理

来自分类Dev

从php字符串中删除短语

来自分类Dev

从字符串中删除短语列表

来自分类Dev

如果字符串在引号中,如何删除字符串中的特定字符 Python

Related 相关文章

  1. 1

    RegEx匹配字符串,如果在分隔符中包含特定单词

  2. 2

    如果在将整数与字符串进行比较时返回错误的结果

  3. 3

    如果在数组中不匹配,则从字符串中删除字符串字符

  4. 4

    如果在数组中不匹配,则从字符串中删除字符串字符

  5. 5

    Rails:如果在数组中,则从字符串中删除子字符串

  6. 6

    颜色字如果在字符串中

  7. 7

    替换字符串中的单词和短语-Javascript

  8. 8

    Java正则表达式-如果字符串不是单词的开头,则从字符串中删除短语

  9. 9

    将单词从字符串拆分为数组,但如果在斜线之间则不拆分

  10. 10

    将单词从字符串拆分为数组,但如果在斜线之间则不拆分

  11. 11

    c 字符串:如果在句子中找到一个单词,则输入 ' '

  12. 12

    如果在R中满足条件,则使用正则表达式删除字符串中的逗号

  13. 13

    如果在迭代时从列表中删除元素,为什么会跳过元素?

  14. 14

    如何删除变量的字符串,如果在数组中检查它后,它与数组键不匹配?

  15. 15

    如果在php中的字符串之间发现两个空格,如何删除一个空格?

  16. 16

    如果在一行中找到特定模式,则查找并替换字符串

  17. 17

    如果在列表中找到字符串,则对其进行过滤

  18. 18

    SQL聚合方法返回字符串(如果在集合中),或任何其他字符串(如果在集合中)

  19. 19

    从字符串中提取数字(如果在R中紧跟某些字符)

  20. 20

    如何检查字符串中的单词或短语并将其与一组单词或短语进行比较?

  21. 21

    颜色字符串和括号(如果在vba中其值大于0)

  22. 22

    比较字符串,如果在SQL Server 2008中为NULL

  23. 23

    如果在外壳程序脚本中为-else,则将参数与字符串匹配

  24. 24

    如果在测试文件中找到字符串,如何使dos中的find命令失败?

  25. 25

    cfquery到queryExecute:如果在SQL字符串中

  26. 26

    如果在列中找不到字符串,則 VBA 錯誤處理

  27. 27

    从php字符串中删除短语

  28. 28

    从字符串中删除短语列表

  29. 29

    如果字符串在引号中,如何删除字符串中的特定字符 Python

热门标签

归档