我不是一个红宝石专家,可能这似乎是一个愚蠢的问题...但我太奇怪了(我认为)我在RSpec匹配器中找到了匹配.
你知道match输入字符串或正则表达式.例:
"test".should match "test" #=> will pass
"test".should match /test/ #=> will pass
Run Code Online (Sandbox Code Playgroud)
当您在输入字符串中插入特殊的正则表达式字符时,奇怪的开始:
"*test*".should match "*test*" #=> will fail throwing a regex exception
Run Code Online (Sandbox Code Playgroud)
这意味着(我认为)输入字符串被解释为正则表达式,然后我应该转义特殊的正则表达式字符以使其工作:
"*test*".should match "\*test\*" #=> will fail with same exception
"*test*".should match /\*test\*/ #=> will pass
Run Code Online (Sandbox Code Playgroud)
从这个基本测试中,我理解match将输入字符串视为正则表达式,但它不允许您转义特殊的正则表达式字符.
我是真的吗?这不是一种奇异的行为吗?我的意思是,这是一个字符串或正则表达式!
编辑后编辑:
继DigitalRoss(右)回答以下测试通过:
"*test*".should match "\\*test\\*" #=> pass
"*test*".should match '\*test\*' #=> pass
"*test*".should match /\*test\*/ #=> pass
Run Code Online (Sandbox Code Playgroud) 我想从日志文件中收集脚本的所有输出,并且必须使用write-output instaed of write-host.
Write-Output "Server:" $a 好像
Server:.
foo
我是否真的必须写信
write-output $("sfdghk:" + $a)才能获得Server:Foo
谢谢-jt
我正试图if在管道内使用.
我知道有where(别名?)过滤器,但是如果我想只在满足某个条件时才激活过滤器怎么办?
我的意思是,例如:
get-something | ? {$_.someone -eq 'somespecific'} | format-table
如何if在管道内使用来打开/关闭过滤器?可能吗?是否有意义?
谢谢
编辑澄清
没有管道,它看起来像这样:
if($filter) {
get-something | ? {$_.someone -eq 'somespecific'}
}
else {
get-something
}
在ANSWER的riknik之后编辑
愚蠢的例子显示了我在寻找什么.您有一个存储在变量上的非规范化数据表,$data并且您希望执行一种"向下钻取"数据过滤:
function datafilter {
param([switch]$ancestor,
[switch]$parent,
[switch]$child,
[string]$myancestor,
[string]$myparent,
[string]$mychild,
[array]$data=[])
$data |
? { (!$ancestor) -or ($_.ancestor -match $myancestor) } |
? { (!$parent) -or ($_.parent -match $myparent) } |
? { (!$child) -or ($_.child -match $mychild) } |
} … 有谁知道更改上下文节点的XSLT指令/函数列表?
例如,指令for-each就是其中之一.
请帮助在XPATH中使用逻辑OR运算符,并从这两个中选择一个请求:
1) .//span[@class=\'fob12\']
2) .//p[@class=\'fob12\']
它们的标签不同.
如何在不使用foreach的情况下在x位置使用xslt,节点值
<items>
<item1>x</item1>
<item2>x</item2>
<item3>x</item3>
</items>
Run Code Online (Sandbox Code Playgroud)
这在编程意义上解释:
<xsl:value-of select="Items/Item[2]"/>
Run Code Online (Sandbox Code Playgroud)
==================================================
只是为了扩展问题,在下面的xml中:
<items>
<about>xyz</about>
<item1>
<title>t1</title>
<body>b1</body>
</item1>
<item2>
<title>t2</title>
<body>b2</body>
</item2>
<item3>
<title>3</title>
<body>3</body>
</item3>
</items>
Run Code Online (Sandbox Code Playgroud)
如何选择第二个项目标题.
如何在PowerShell会话中输入"是"作为交互式问题的答案?我知道,在Bash中,Yes是提示回答"是"的工具.在我的情况下,我无法抑制提示.
我正在运行的脚本停在
如果您想继续,请回答"是":
powershell如何运行脚本并在提示时"回答"是?
PowerBoots是一个非常有用的DSL示例,它利用脚本块来创建GUI:
Boots {
StackPanel {
Button "A bed of clams"
Button "A coalition of cheetas"
Button "A gulp of swallows"
}
}
我知道如果没有指定目标域,这个问题看起来很一般.所以我要更具体:
你知道在PowerShell中实现一种DSL的任何其他项目吗?
我想知道是否可以从我正在执行ruby脚本的位置更改当前终端目录.
例如,如果我正在$HOME终端中执行脚本,我想$HOME/mydir在脚本的末尾cd入.
我尝试了几件事,但我总是在脚本启动的同一个导演中找到.
我试过的事情:
Dir.chdir( mydir )
%[cd mydir]
Run Code Online (Sandbox Code Playgroud)
它们实际上是在更改目录,但仅在脚本执行的线程中.当脚本结束时,我在终端中的当前位置仍然与启动脚本之前的位置相同.
我在SO中发现了类似的东西,但它与Python相关并且响应似乎是否定的.
你可能会问为什么?
我目前正在参与一个命令行应用程序(使用gli),作为起点,它需要一个项目文件夹.所以我的第一个命令看起来像:
$ myfoo new project
Run Code Online (Sandbox Code Playgroud)
这会project在当前目录中创建一个名称为的新文件夹.现在能够使用我需要的其他命令:
$ cd project
project$ myfoo domore
Run Code Online (Sandbox Code Playgroud)
所以我只是觉得在project执行完毕后发现自己很好myfoo new project.
我害怕,这并不容易(根本不可能).那么使用一个执行我想要的ruby调用的bash脚本代替RubyGems生成的标准文件呢?这可行吗?我傻了吗?我应该用eval吗?
谢谢你的回答.但我担心没人接受.可能问题不是:).
作为Powershell世界的新手,有时我会陷入棘手的语法.这就是为什么我试图弄清楚语言中括号的所有可能用途.
你还知道吗?你能加到这里吗?
在我这里(省略了管道中卷曲的基本用法和方法调用中的圆形):
# empty array
$myarray = @()
# empty hash
$myhash = @{}
# empty script block
$myscript = {}
# variables with special characters
${very strange variable @ stack !! overflow ??}="just an example"
# Single statement expressions
(ls -filter $home\bin\*.ps1).length
# Multi-statement expressions inside strings
"Processes: $($p = “a*”; get-process $p )"
# Multi statement array expression
@( ls c:\; ls d:\)
Run Code Online (Sandbox Code Playgroud) powershell ×5
ruby ×2
xpath ×2
xslt ×2
xslt-1.0 ×2
abstraction ×1
c# ×1
dsl ×1
msxsl ×1
pipeline ×1
rspec ×1
statements ×1
syntax ×1
xml ×1
xslt-2.0 ×1