匹配报价内容

2024-07-04

我正在尝试从字符串中删除引号。例子:

"hello", how 'are "you" today'

returns

hello, how are "you" today

我正在使用 php preg_replace。

我目前有几个解决方案:

(\'|")(.*)\1

问题是它匹配中间的所有字符(包括引号),所以结果 ($2) 是

hello", how 'are "you today'

反向引用不能在字符类中使用,所以我不能使用类似的东西

(\'|")([^\1\r\n]*)\1

与中间的第一个反向引用不匹配。

第二种解决方案:

(\'[^\']*\'|"[^"]*")

问题是,这包括反向引用中的引号,因此实际上根本没有做任何事情。结果(1 美元):

"hello", how 'are "you" today'

代替:

(\'[^\']*\'|"[^"]*")

简单地写:

\'([^\']*)\'|"([^"]*)"
  \______/    \_____/
     1           2

现在其中一组将匹配引用的内容。

在大多数风格中,当在替换字符串中引用无法匹配的组时,空字符串将被替换,因此您可以简单地替换为$1$2一个将成功捕获(取决于替代方案),另一个将替换为空字符串。

这是一个 PHP 实现(如 ideone.com 上所示 http://ideone.com/jKMNZ):

$text = <<<EOT
"hello", how 'are "you" today'
EOT;

print preg_replace(
  '/\'([^\']*)\'|"([^"]*)"/',
  '$1$2',
  $text
);
# hello, how are "you" today 

仔细看看

让我们使用1 and 2引用(为了清楚起见)。还将添加空格(为了清晰起见)。

之前,作为第二个解决方案,您有以下模式:

(  1[^1]*1  |  2[^2]*2  )
\_______________________/
   capture whole thing
   content and quotes

正如您正确指出的那样,这正确匹配了一对引号(假设您无法转义引号),但它没有捕获content part.

根据上下文,这可能不是一个问题(例如,您可以简单地从开头和结尾修剪一个字符来获取内容),但同时,解决问题也不难:只需从分别有两种可能性。

1([^1]*)1  |  2([^2]*)2
 \_____/       \_____/
 capture contents from
each alternate separately

现在,组 1 或组 2 将捕获内容,具体取决于匹配的替代项。作为“奖励”,您可以检查使用了哪个报价,即如果第 1 组成功,则1被使用了。


Appendix

The […] is a 字符类 http://www.regular-expressions.info/charclass.html。就像是[aeiou]匹配任意小写元音之一。[^…] is a negated字符类。[^aeiou]匹配其中之一除了小写元音。

(…)是用来grouping http://www.regular-expressions.info/brackets.html. (pattern)是一个捕获组并创建反向引用。(?:pattern)是非捕获的。

参考

  • 用于捕获的正则表达式.info/括号 http://www.regular-expressions.info/brackets.html, 交替 http://www.regular-expressions.info/alternation.html, 字符类 http://www.regular-expressions.info/charclass.html, 重复 http://www.regular-expressions.info/repeat.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

匹配报价内容 的相关文章

  • 排除以特定字符开头的正则表达式匹配

    我有以下内容 Regex urlRx new Regex https ftp file www A Za z0 9 A Za z0 9 RegexOptions IgnoreCase 这匹配所有 URL 但我想排除那些以字符开头的 URL
  • 整数或双精度值的正则表达式

    我正在尝试创建一个正则表达式来接受整数和双精度值 正值和负值 这就是我所拥有的 d d d 在此之前 我将其标记为重复问题 所有问题都已签入 所以我最终遇到了相同的问题 5 and 5 gt true 5 00 and 5 00 gt tr
  • Android正则表达式-返回匹配的字符串

    在我的 Android 项目中 我有一个正则表达式和一个字符串 其中应该有匹配的表达式 问题是我只找到了一个matches 方法 返回布尔值 有没有什么东西 只返回匹配的字符串 例如 如果我的字符串是 中午 12 点去商店 我想检查该字符串
  • 高性能简单Java正则表达式

    我正在处理的部分代码使用一堆正则表达式来搜索一些简单的字符串模式 例如 foo 0 9 3 4 bar 等模式 目前 我们使用静态编译的Java Patterns 然后调用Pattern matcher检查字符串是否包含与模式的匹配 我不需
  • Java(正则表达式)-获取句子中的所有单词

    我需要将 java 字符串拆分为单词数组 假设该字符串是 Hi I need to split this string into a serie s of words 目前我正在尝试使用这个String strs str split w 但
  • 在javascript中使用正则表达式从字符串中提取子字符串

    我是 javascript 新手 如何提取与 javascript 字符串中的正则表达式匹配的子字符串 例如在Python中 version regex re compile r d d d line 2021 05 29 Version
  • 如何检查字符串是否仅包含字母数字字符和破折号?

    我正在测试的字符串可以匹配 w 我可以在 Python 中测试字符串是否符合此要求 而不是列出不允许的字符并对其进行测试吗 如果要根据正则表达式测试字符串 请使用re http docs python org library re html
  • 从证书 DN 中解析 CN [重复]

    这个问题在这里已经有答案了 首先我要说明的是 这是一个审美问题 我已经解决了我自己的问题 我只是好奇更好的方法 所以 我有一个证书 DN 如下所示 CN Jimmy Blooptoop OU Someplace OU 员工 DC Bloop
  • tkinter - 在askopenfile期间检索文件名

    我有一个用 Python 和 tkinter 制作的文本编辑器 这是我的 打开文件 方法 def onOpen self file askopenfile filetypes Text files txt txt file read sel
  • 将整数 (n) 替换为重复 n 次的字符

    假设我有一个字符串 3 我想把它变成 基本上用重复出现的整数替换 相当于整数值 我怎样才能实现这个目标 我知道反向引用可以与str replace var str 3 str replace 0 9 g x 1x gt x3x 我们可以使用
  • 将字符拆分为字母和数字

    我有一个独特的角色 每个字母后面都有一个数字 例如 A1B10C5 我想把它分成letter lt c A B C and number lt c 1 10 5 使用 R 我们可以使用正则表达式查找来分割字母和数字 v1 lt strspl
  • awk 如何找到带括号的变量的匹配项?

    我有一个文件some file txt 我想在其中找到匹配线name方括号内 必须完全匹配 因为某些单词可能会重复 例如foo在下面的例子中 文档内容如下所示 foo url foo Foo url bar Bar url fizz buz
  • 正则表达式替换“NO-BREAK SPACE”

    我正在寻找一个正则表达式来替换字符串中的 NO BREAK SPACE 有一些与 NO BREAK SPACE 相关的问题 但似乎没有一个问题能让我找到正确的答案 到目前为止 我尝试使用 字符串 AB 的第二个字符是不间断空格 但没有成功
  • 带转义引号的带引号字符串的正则表达式

    如何获取子字符串 It s big problem 使用正则表达式 s function return It s big problem 适用于 Regex Coach 和 PCRE Workbench JavaScript 测试示例 va
  • PHP Regex,从文本中提取所有自定义标签

    简而言之 我需要从一段文本中提取大括号内的所有字符串 如下所示 这是一个 tag 但这里也是 tag 2 然后又是 tag 3 这里但周围有一些垃圾 我想获得一个标签数组 tag 2 和 tag 3 标签只能包含单词字符 我试过这个 tag
  • sed 正则表达式非贪婪替换?

    我知道另一个问题 https stackoverflow com questions 1103149 non greedy regex matching in sed这非常相似 但由于某种原因我仍然遇到问题 我有一个 GC 日志 我正在尝试
  • 如何修复 emacs 中的“正则表达式匹配器中的堆栈溢出”

    我是 Emacs 的忠实粉丝 并且经常使用它 尤其是在编程和调试 使用 gud C C 时 最近我必须调试一个程序 相当简单 但需要计算大量数据 图论 但我遇到了一个相当烦人的问题 在程序逐步执行过程中 出现以下错误 error in pr
  • 正则表达式搜索避免嵌套结果

    我的文档包含几个代码块实例 如下所示 highlight some code endhighlight 在 Atom io 中 我正在尝试编写一个正则表达式搜索来捕获这些内容 我的第一次尝试是 highlight S s endhighli
  • gsub() 中超过 9 个反向引用

    如何使用超过 9 个反向引用的 gsub 我希望下面示例中的输出为 e g i j o gt test lt abcdefghijklmnop gt gsub w w w w w w w w w w w w w w w w 5 7 9 10
  • 如何获取 PostgreSQL 中字符串中正则表达式匹配的位置?

    我有一个包含书名的表 我想选择标题与正则表达式匹配的书籍 并按标题中正则表达式匹配的位置对结果进行排序 单字搜索很容易 例如 TABLE book id title 1 The Sun 2 The Dead Sun 3 Sun Kissed

随机推荐