Regex 正则表达式匹配所有未被引号包围的事件,并在字符处停止
欧洲已经很晚了,我无法运行正则表达式:-( 我想匹配所有文本,即而不是加引号 输入:哦,是的,这个;输入;‘带引号’;可以;‘非常’;狡猾;‘相信我’;男孩 很容易匹配所有用引号括起来的文本 但是我想要的是相反的。而且匹配应该被分割;以便我得到以下匹配:Regex 正则表达式匹配所有未被引号包围的事件,并在字符处停止,regex,regex-negation,regex-group,Regex,Regex Negation,Regex Group,欧洲已经很晚了,我无法运行正则表达式:-( 我想匹配所有文本,即而不是加引号 输入:哦,是的,这个;输入;‘带引号’;可以;‘非常’;狡猾;‘相信我’;男孩 很容易匹配所有用引号括起来的文本 但是我想要的是相反的。而且匹配应该被分割;以便我得到以下匹配: 哦,是的,这个 输入 能 狡猾的 男孩 在我生气之前有什么想法吗 提前thx!我想你可以使用这样的技巧: '[^;]*'(?=;|$)|([^;]+)(?=;|$) 说明: '[^;]*'(?=;|$) => finding
提前thx!我想你可以使用这样的技巧:
'[^;]*'(?=;|$)|([^;]+)(?=;|$)
说明:
'[^;]*'(?=;|$) => finding words between `'` and ended with `;` or end of text, but not group it
| => or
([^;]+)(?=;|$) => finding other words ended with `;` or end of text, but grouped
现在,您可以使用$1
捕获您想要的内容
您可以使用正则表达式
(?<=;|^)[^;'][^;]*[^;'](?=;|$)
(?如果先用分隔符;
将字符串拆分为一个数组,然后检查每个数组元素是否以,
开头和结尾,或者只使用正则表达式(?(?可以简化为(?:'[^;]+'([^;]+)(?=;;$)
没有代码重复。(?=;)
有两次,一次删除它简化了正则表达式的可维护性,并减少了3个字符。我确实意识到这个解决方案只需要少量的额外步骤,但代码的可维护性对用户来说可能更重要。它仍然应该作为一个选项提供给用户,因此我认为建议一个simplif没有任何害处你的答案上面有ied模式。