ruby - 由字符串包围的正则表达式模式?
问题描述
我有以下脚本,脚本输出如下所示的数组。
[
[0] "# bash LAN\n\n```\nnmap -sn 192.168.3.*\n```\n",
[1] "# node.js npm\n\n`sudo apt update && sudo apt install nodejs npm -y`\n",
[2] "# something title\n\nsomething content\n",
[3] "# bash log\n\n```\ntail -f",
[4] "# or",
[5] "# tail -f -n 50\n```\n\n\n"
]
Encoding.default_external = 'UTF-8'
require 'pry'
require "awesome_print"
# p \
ap \
arrayobj = <<-'EOS'.scan(/^#(?!#).*(?:\R(?!#(?!#)).*)*/) # .scan(/^#.*$\n(.*)/m)
# bash LAN
\```
nmap -sn 192.168.3.*
\```
# node.js npm
`sudo apt update && sudo apt install nodejs npm -y`
# something title
something content
# bash log
\```
tail -f
# or
# tail -f -n 50
\```
EOS
我想用#
(single hash) 分割 EOS 封闭的文本,但如果单个散列被 Markdown 代码标签包围,请忽略该单个散列。
所以,在那种情况下,我想要的是跟随输出。你如何获得输出?
[
[0] "# bash LAN\n\n```\nnmap -sn 192.168.3.*\n```\n",
[1] "# node.js npm\n\n`sudo apt update && sudo apt install nodejs npm -y`\n",
[2] "# something title\n\nsomething content\n",
[3] "# bash log\n\n```\ntail -f\n# or\n# tail -f -n 50\n```\n\n\n",
]
解决方案
您可以使用
.scan(/^#(?!#)(?:(?!```)[^#]|```.*?```)*/m).flatten
请参阅Ruby 演示和Rubular 演示。
细节
^
- 一行的开始#(?!#)
- 一个#
不跟随另一个#
(?:(?!```)[^#]|```.*?```)*
- 0次或多次重复(?!```)[^#]
- 除此以外的任何字符#
都不会开始```
字符序列|
- 或者```
- 三个反引号.*?
- 任何 0+ 个字符,尽可能少```
- 三个反引号
m
修饰符匹配任何字符,.
包括换行字符。
推荐阅读
- c# - 从布尔函数c#中提取字符串变量
- python - 从另一个窗口启动的带有文本变量的 Python tkinter 标签集方法
- apache-kafka - 如何在 KafkaStream 应用程序中获取 partitionId 和 TopicName
- python - 在进入第一个函数之前,Python HDBScan 类总是在第二次迭代中失败
- r - 在 R 中绘制具有特定参数的正态分布
- javascript - WebRTC 视频流已接收但未播放
- javascript - 当我将我的预设配置为 commonjs 时,为什么我的 webpack babel 设置会发出 ESM 要求?
- nifti - 如何更改 NifTI 图像中的平面?
- python-hypothesis - 生成多个 kwargs 的假设策略
- typescript - Typescript 类型细化未知对象和检索元素