我正在将一个库从Ruby移植到Go,并且刚刚发现Ruby中的正则表达式与Go(谷歌RE2)不兼容.我注意到Ruby和Java(以及其他语言使用PCRE正则表达式(perl兼容,它支持捕获组)),因此我需要重新编写表达式,以便它们在Go中编译好.
例如,我有以下正则表达式:
`(?<Year>\d{4})-(?<Month>\d{2})-(?<Day>\d{2})`
Run Code Online (Sandbox Code Playgroud)
这应该接受如下输入:
2001-01-20
Run Code Online (Sandbox Code Playgroud)
捕获组允许将年,月和日捕获到变量中.为了获得每个组的价值,这很容易; 您只需使用组名索引返回的匹配数据,然后返回值.所以,例如获得年份,像这样的伪代码:
m=expression.Match("2001-01-20")
year = m["Year"]
Run Code Online (Sandbox Code Playgroud)
这是我在表达式中使用很多的模式,所以我需要做很多重写.
那么,有没有办法在Go regexp中获得这种功能; 我该如何重写这些表达式?
只是尝试在ruby中调试正则表达式.当我打印正则表达式的内容时,它显示?-mix
在正则表达式的开头,即使这些字符不是表达式的一部分.请参阅以下IRB输出以查看此图示
irb(main):028:0* EXPR = /^a$/
=> /^a$/
irb(main):029:0> EXPR
=> /^a$/
irb(main):030:0> puts EXPR
(?-mix:^a$)
=> nil
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,当您使用puts
打印出正则表达式的内容时,就会出现?-mix
在开头.我应该担心吗?它来自哪里?
我已经在表单的本地私人仓库中有一个工作区:
../Workspace/ComponentA/
这已经被检入git了.然后,我将在以下位置初始化一个新组件:
../Workspace/ComponentB
所以,在ComponentB中,我运行npm init,然后转到git问题,但我不知道这个问题的正确答案是什么.如果父文件夹已经在git中,然后需要将新组件添加到git,我键入什么来指定npm init要求的内容.
谢谢.
我试图找到此解决方案的答案,但我找到的答案通常与将“模块”添加到脚本标记(这不适用于我的情况,因为我没有编写浏览器代码)或使用导入/导出有关在 javascript 文件中(Node 目前不支持),这意味着需要使用 babel 或 typescript。由于我在打字稿项目中看到此错误,因此我不希望看到此错误。
实际上,我有 2 个 typescript/webpack 项目(设置几乎相同,项目 A 依赖于项目 B)1 从另一个导入定义。
在项目 B 中,我有几个类,其中 2 个是导出的,还有一些其他定义。在项目B的index.ts中:
export * from './types';
export * from './specService/spec-option-service.class';
export * from './converter/xpath-converter.class';
Run Code Online (Sandbox Code Playgroud)
这些是这样导出的:
// types.ts
//
export interface IElementInfo {
readonly id?: string;
readonly recurse?: string;
readonly discards?: ReadonlyArray<string>;
readonly descendants?: {
readonly by?: string;
readonly throwIfCollision?: boolean;
readonly throwIfMissing?: boolean;
};
}
// ... plus other similarly defined exports
Run Code Online (Sandbox Code Playgroud)
// specService/spec-option-service.class.ts
//
export class SpecOptionService { ...
Run Code Online (Sandbox Code Playgroud)
// …
Run Code Online (Sandbox Code Playgroud) 在使用serde_json读取json文档时,我编写了以下代码行来获取解包返回值的结果serde_json::from_str
:
fn get_json_content(content_s: &str) -> Option<Value> {
let ms: String = serde_json::from_str(content_s).unwrap; // <--
match serde_json::from_str(content_s) {
Ok(some_value) => Some(some_value),
Err(_) => None
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我忘记了()
调用结束时unwrap
,导致以下错误:
错误:尝试
unwrap
在类型上获取方法的值core::result::Result<_, serde_json::error::Error>
Run Code Online (Sandbox Code Playgroud)let ms: String = serde_json::from_str(content_s).unwrap;
但是当我进一步看到这一点时,让我感到奇怪的是:
core::result::Result<_, serde_json::error::Error>
Run Code Online (Sandbox Code Playgroud)
我理解匹配上下文中的下划线意味着什么,但实例化泛型?那么这是什么意思?我在Rust书籍,参考书或网络搜索中找不到任何答案.
我有一个由任务调度程序调用的powershell脚本.任务的定义还使用>>将输出重定向到日志文件.PowerShell脚本调用C#控制台程序,该程序生成宽度超过80个字符的输出.但是,日志文件中的结果输出将C#程序的所有输出都包装为80个字符.请注意,只包含C#程序的输出.脚本的所有其他输出(由Write-Host生成)不会被包装.另请注意,此包装仅在任务计划程序运行脚本时发生.
这是脚本调用链:
任务定义调用.cmd脚本(RunWidthTest.cmd)
RunWidthTest.cmd:powershell -File.\ RunReports.ps1 >> C:\ Log\output.log
RunReports.ps1(片段):
写主持人"============================================== ==========为$ valueDate运行日期文件的报告"
.\ ReportRunner.exe --ValueDate $ valueDate | 的Out-Default
请注意,需要将outout out to Out-Default以避免由于可执行文件的输出尝试写入与powershell脚本相同的流而没有PowerShell知道它而发生的另一个PowerShell错误(Write-Host:The OS句柄的位置不是FileStream所期望的.不要在一个FileStream和Win32代码或另一个FileStream中同时使用句柄.这可能会导致数据丢失.)
所以在这种情况下,Write-Host行输出的字符串不会被包装,但是,ReportRunner.exe生成的任何输出都被包装为80个字符,只有在使用任务调度程序运行时才会出现!如果您更改重定向发生的点,即如果您在定义中重定向任务(任务的命令行而不是脚本内),则会发生相同的行为
有关为什么会发生这种情况以及如何覆盖此宽度限制的任何线索.
谢谢.
只是尝试更新到最新版本的Ruby.在ruby-lang.org/en/documentation/installation/#homebrew上,我发现你应该可以通过自制程序来完成它:
brew install ruby
Run Code Online (Sandbox Code Playgroud)
但是,当我在'更新'之后列出ruby版本(ruby -v)时,它仍然是旧版本2.0.0.
Hermes:~ Sancho$ ruby -v
ruby 2.0.0p481 (2014-05-08 revision 45883) [universal.x86_64-darwin13]
Run Code Online (Sandbox Code Playgroud)
我碰巧列出了/ usr/local/bin /的内容,我可以看到一个符号链接:
红宝石 - > ../Cellar/ruby/2.2.1/bin/ruby
所以,我不知道发生了什么,以及为什么版本仍然列出旧数字而不是2.2.1,因为它看起来应该如此.
有各种其他ruby工具(erb,gem,irb,rake,rdoc,ri)的sym链接到版本2.2.1.
那么这里发生了什么以及如何正确安装2.2.1版本?
我也安装了RVM,但我想将ruby的系统版本更新到最新版本.
如何确保WCF ChannelFactory在xml配置中使用绑定设置(忽略MaxArrayLength)
嗨,我是Wcf的新手,并且写了我的第一个Wcf服务和客户端.我不想使用工具来生成配置; 我宁愿自己编写配置.我试图解决的问题是客户端通过netTcp与服务进行通信.该服务可能会返回非常大的有效负载(比默认的readerQuotas.maxArrayLength更好).当字节流有效载荷相对较低时(即小于它认为约为16K的默认值),我最初开发的组件工作正常.我可以通过创建绑定并将MaxArrayLength设置为足够大的值来以编程方式解决此问题.但是,我需要能够在xml配置中执行等效操作.
我的app.config(客户端)是:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<client>
<endpoint address="net.tcp://localhost:9000/WcfDataService/RemoteDataRequesterService/"
binding="netTcpBinding" bindingConfiguration="unsecureNetTcpBinding"
contract="WcfDataServiceLib.IRemoteDataRequester"
name="DataRequesterEndpoint" />
</client>
<bindings>
<netTcpBinding>
<binding name="unsecureNetTcpBinding" maxReceivedMessageSize="2147483647">
<readerQuotas maxArrayLength="1000000" />
<security mode="None" />
</binding>
</netTcpBinding>
</bindings>
</system.serviceModel>
</configuration>
Run Code Online (Sandbox Code Playgroud)
创建客户端代理的代码如下:
private void Init()
{
var address = new EndpointAddress(@"net.tcp://localhost:9000/WcfDataService/RemoteDataRequesterService/");
const string endpointName = "DataRequesterEndpoint";
ChannelFactory<IRemoteDataRequester> factory = new ChannelFactory<IRemoteDataRequester>(
endpointName);
IRemoteDataRequester proxy = factory.CreateChannel(address);
// call business methods on proxy ...
}
Run Code Online (Sandbox Code Playgroud)
请注意,代码通过变量"endpointName"链接到配置.
服务端配置(我不认为这是相关的,但包括完整性):
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="WcfDataServiceLib.RemoteDataRequesterService" …
Run Code Online (Sandbox Code Playgroud) 我需要解释两点 - 如何在不使用已弃用的 .reset() 方法的情况下重置 yargs;(.global() 方法,但如何??) - 如何将命令行传递给用户输入的 yargs
鉴于以下测试:
import * as yargs from 'yargs';
describe.only('how to write a unit test for yargs with typescript', () => {
beforeEach(() => {
yargs.reset(); // No, but how do we get a new yargs instance?
});
it('yargs', () => {
const usernameOption = {
alias: 'username',
describe: 'website username'
};
// (['login', '-u', 'jimmy']) => where does this go, without causing a build error
// TS2349: This expression is not …
Run Code Online (Sandbox Code Playgroud) 例如,如果您在 powershell 会话中执行此命令
\nwrite-host \'hello\' -ForegroundColor \'red\' -BackgroundColor \'cyan\'\n\n
Run Code Online (Sandbox Code Playgroud)\n调整窗口大小会导致背景颜色填充整行:
\n\n我已经在 Windows 终端、Windows 控制台和 Fluent 终端中对此进行了测试,它们都表现出这种行为。(我猜测可能有一个虚拟终端序列/ANSI 代码来解决这个问题,但我不知道这可能是什么)。
\n那么,我们怎样才能防止这种情况发生呢?
\n\xce\xbb $PSVersionTable\n\nName Value\n---- -----\nPSVersion 7.1.1\nPSEdition Core\nGitCommitId 7.1.1\nOS Microsoft Windows 10.0.19041\nPlatform Win32NT\nPSCompatibleVersions {1.0, 2.0, 3.0, 4.0\xe2\x80\xa6}\nPSRemotingProtocolVersion 2.3\nSerializationVersion 1.1.0.1\nWSManStackVersion 3.0\n
Run Code Online (Sandbox Code Playgroud)\n编辑:作为测试,我尝试了以下操作:
\nwrite-host \'hello\' -ForegroundColor \'red\' -BackgroundColor \'cyan\' -NoNewline; write-host \'world\' -BackgroundColor black\n
Run Code Online (Sandbox Code Playgroud)\n当然,它会显示“HelloWorld”,而“World”则没有背景颜色,或更准确地说与默认颜色(黑色)相同。
\n如果我们再向前迈出一步,并在背景颜色设置为黑色后打印一个额外的空格,那么这不会达到预期的响应,IE 我们会在调整大小后看到背景颜色青色填充整行。
\n因此,我们需要某种不可见的字符来阻止背景颜色的溢出,或者需要一种我目前不知道的完全不同的方法。
\npowershell ×2
regex ×2
ruby ×2
typescript ×2
config ×1
console ×1
generics ×1
git ×1
go ×1
javascript ×1
logging ×1
macos ×1
node.js ×1
npm-init ×1
redirect ×1
rust ×1
unit-testing ×1
wcf ×1
wcf-binding ×1
wcf-client ×1
webpack ×1
write-host ×1
yargs ×1