我试图同时删除并存储(到一个数组)字符串中的一些正则表达式的所有匹配.要将字符串中的匹配项返回到数组中,您可以使用
my @matches = $string=~/$pattern/g;
Run Code Online (Sandbox Code Playgroud)
我想对替换正则表达式使用类似的模式.当然,一个选择是:
my @matches = $string=~/$pattern/g;
$string =~ s/$pattern//g;
Run Code Online (Sandbox Code Playgroud)
但是如果没有在整个字符串上运行两次正则表达式引擎,真的没有办法做到这一点吗?就像是
my @matches = $string=~s/$pattern//g
Run Code Online (Sandbox Code Playgroud)
除了这将只返回子数,不管列表上下文.作为一个安慰奖,我还会采用一种方法来使用qr //我可以简单地将引用的正则表达式修改为子正则表达式,但我不知道这是否可能(并且这不会妨碍搜索相同的字符串两次).
我想编写一个 bash 脚本或函数,能够从调用者的 bash 历史记录中删除与其自身调用相对应的条目。这可能吗?
该用例是在团队拥有的集群上编写秘密的包装器,我想添加一些便利,以确保所有团队成员不会无意中以纯文本形式将秘密留在 bash 历史记录中。起初,我打算要求使用脚本read -rs来防止命令包含秘密。然后,意识到有些人无论如何都会不可避免地在命令调用中输入秘密名称,我想知道我是否可以支持这一点,但删除调用 bash 历史记录。
本质上,就像history -d $HISTCMD在脚本中添加一样;但是,直到脚本完成后才会写入历史记录项。所以没有骰子。
有没有办法告诉 bash“不要在历史记录中记录此命令”或在完成后将其删除?
我有一个像下面这样的数组
[
[[0, :a], [2, :b]],
[3, :c],
[4, :d],
[[5, :e], [6, :f], [7, :g]]
]
Run Code Online (Sandbox Code Playgroud)
也就是说,元素数组是(1)2元素数组,或(2)2元素数组数组.
我试图找到一种优雅的方法来"扁平化"这个数组,使得(2)元素扩展到根级元素.在这个例子中:
[[0, :a], [2, :b], [3, :c], [4, :d], [5, :e], [6, :f], [7, :g]]
Run Code Online (Sandbox Code Playgroud)
这几乎就像使用一样Array#flatten(depth),除了depth需要从内到外工作,而不是外在工作.
实际的数组可能变得非常大,因此<<出于性能原因,我不希望将()元素推送到循环中的新数组.出于某种原因,我想不出如何使用的任意组合map,flatten,flat_map,或其他更有效的Enumerable方法来完成,而不需要写一个C++ -风格的预分配,并填入循环.任何人都可以想到更多Rubyist方式来做到这一点吗?
文档清楚地说明了对表单输入(例如文本字段)使用错误样式。但是如何在自定义元素(例如文件上传按钮的文本标签)或任何其他可能不适合预定义组件的自定义组件上使用相同的样式?
为清楚起见进行编辑:我不想只选择我喜欢的颜色并使用适当的选择器将其放入我的 css 中。我想确保我使用与主题相同的错误颜色,无论是默认的、某些导入的主题还是自定义的(如果自定义很容易,但不是 DRY,只需在 css 中使用相同的值)。
具体来说,在这个用例中,我想限制用户上传小于 100MB 的文件,如果他们选择了大于此限制的文件,则显示错误消息。我想以配置主题的错误样式显示文本,但是从material-ui docs我只能看到如何设置文本字段等预打包组件的错误属性。
所以我在这里简化了:
<input
accept="video/*"
id="file-upload-button"
type="file"
onChange={(e) => {this.fileChanged(e);}}
/>
<label htmlFor="file-upload-button">
<Button variant="contained" component="span" color="default">
Browse video
</Button>
<br /><small>(Max size: 100MB)</small>
</label>
Run Code Online (Sandbox Code Playgroud)
其中input标签已display: none通过 css 文件应用。还,
fileChanged(e) {
let file = e.target.files[0];
let sizeMB = file.size / 2**20;
this.setState({
selectedFile: e.target.files[0],
fileTooLarge: sizeMB > 100
});
}
Run Code Online (Sandbox Code Playgroud)
如何获取主题的错误颜色以将其应用于“最大尺寸”消息或其他元素?
我正在尝试为应用程序扩展Ruby的NilClass,以便任何方法调用都将返回nil(实际上是self,新的扩展nil).目的是避免许多额外的零检查逻辑,例如,
results = data.nil? nil : data.process()
output = results.nil? nil : results.format()
Run Code Online (Sandbox Code Playgroud)
并简单地替换它
output = data.process().format()
Run Code Online (Sandbox Code Playgroud)
如果在链中的任何地方返回nil,则返回nil.
让一个类响应任意消息很容易:
class SuperNil
def method_missing(sym, *args)
return self
end
end
Run Code Online (Sandbox Code Playgroud)
现在,supernil = SuperNil.new; supernil.anything返回对象supernil.但是,这并不是真的,因为它会评估为真.它会以某种方式扩展NilClass,以便我的对象评估为false吗?我遇到麻烦的地方是,即使在扩展NilClass之后,我也无法创建SuperNil的对象.NilClass.new给出了一个错误,SuperNil.new也是如此.
是否可以创建NilClass扩展的对象?它会评估为假吗?