Regex 获取与单词之一匹配的引号之间的所有文本

Regex 获取与单词之一匹配的引号之间的所有文本,regex,ruby,string,Regex,Ruby,String,在上面的字符串中,预期输出为“由于与我或其指定的恢复教练没有联系,客户被解雇” 这包含被驳回的单词 类似地,正则表达式应该选取包含字符串中的disposed/discharged/amendable之一的字符串 我已经在尝试过了,您可以用下面的正则表达式匹配所需的文本 a:5:{s:12:"SubmissionID";s:0:"";s:13:"NotesClientID";s:4:"1891";s:5:"F

在上面的字符串中,预期输出为“由于与我或其指定的恢复教练没有联系,客户被解雇”

这包含被驳回的单词

类似地,正则表达式应该选取包含字符串中的disposed/discharged/amendable之一的字符串


我已经在

尝试过了,您可以用下面的正则表达式匹配所需的文本

a:5:{s:12:"SubmissionID";s:0:"";s:13:"NotesClientID";s:4:"1891";s:5:"Field";a:5:
{i:0;s:7:"8/19/19";i:1;s:0:"";i:4;s:0:"";i:5;s:160:"client is dismissed due to no contact with me or with his assigned Recovery
Coach";i:7;s:0:"";}s:10:"SecurityID";s:40:"a31b7ea7f9191465525d0ac9a6358ba7b3d3e0fc";s:13:"action_doSave";s:4:"Save";}

关于正则表达式的每个元素的详细信息见1

如果变量
str
包含问题中作为示例给出的文本,可以这样写:

/.*?"(?=(?:[^"]*\bdismissed\b[^"]*"))\K[^"]*(?=")/m
[String#scan]返回一个数组,其中包含正则表达式的每个匹配项。这里有一根火柴

Ruby的正则表达式引擎执行以下操作

str.scan(/.*?"(?=(?:[^"]*\bdismissed\b[^"]*"))\K[^"]*(?=")/m)
  #=> ["client is dismissed due to no contact with me or with his assigned Recovery\nCoach"]

增编:我没有提到问题中的目标词可以是“被解雇”、“被释放”或“可服从”。与其我修改我的答案,不如说在哪里

/
.*?                : match 0+ characters, lazily
"                  : match a double-quote
(?=                : begin a positive lookahead to assert that
                     'dismissed' appears before the next double-quote
  (?:              : begin a non-capture group
    [^"]*          : match 0+ characters other than double-quotes
    \bdismissed\b  : match 'dismissed'
    [^"]*          : match 0+ characters other than double-quotes
    "              : match a double-quote
  )                : end non-capture group
)                  : end positive lookahead
\K                 : forget all matched so far and reset match
[^"]*              : match 0+ characters other than double-quotes
(?=")              : assert the next character is a double-quote
/m                 : multiline mode to match line terminators
出现在应替换为的正则表达式中

\bdismissed\b

一,。移动光标查看详细说明。

如果没有必要,请不要链接到屏幕截图。将您想要讨论的正则表达式作为文本发布。另外,我不明白您的问题是如何定义您感兴趣的子字符串的开头的,因为您的字符串中有几个带引号的子字符串。@user1934428,据我所知,OP希望提取一个由双引号括起来的字符串,该字符串包含三个指定单词中的任意一个,并且没有双引号。阿卡什,对吗?无论何时你给出一个例子,你都应该展示你想要的结果。我建议您编辑以澄清。@AkashK:如果有多个字符串与该标准匹配,还应澄清效果。是否要获取所有匹配字符串的数组?我认为您需要添加其他可能的
已解除/已解除/可修改的
关键字。我是这样想的:@MDR,谢谢你的提醒。我快速浏览了一下您提供的链接,您使用了一个捕获组。这似乎很管用,尽管我有一种不合理的偏好,只要有可能,就只进行匹配。一个小细节:你不需要逃避一个双引号(或单引号)。
\b(?:dismissed|discharged|amenable)\b