我知道 /?表示/是可选的.所以"玩具?" 将匹配玩具和玩具.我的理解是,如果我把它变得懒惰并使用"玩具??" 我将匹配玩具和玩具,并总是返回玩具.所以,快速测试:
private final static Pattern TEST_PATTERN = Pattern.compile("toys??", Pattern.CASE_INSENSITIVE);
public static void main(String[] args) {
for(String arg : args) {
Matcher m = TEST_PATTERN.matcher(arg);
System.out.print("Arg: " + arg);
boolean b = false;
while (m.find()) {
System.out.print(" {");
for (int i=0; i<=m.groupCount(); ++i) {
System.out.print("[" + m.group(i) + "]");
}
System.out.print("}");
}
System.out.println();
}
}
Run Code Online (Sandbox Code Playgroud)
是的,它看起来像预期的那样工作
java -cp .. regextest.RegExTest toy toys
Arg: toy {[toy]}
Arg: toys {[toy]}
Run Code Online (Sandbox Code Playgroud)
现在,将正则表达式更改为"toys ?? 2",它仍然匹配toys2和toy2.在这两种情况下,它都会返回整个字符串而不删除s.搜索"玩具?2"和"玩具?? 2"之间是否有任何功能差异.
我问的原因是因为我找到了如下例子:
private final static Pattern TEST_PATTERN …
Run Code Online (Sandbox Code Playgroud) 我生成一个AsymmetricCipherKeyPair,如下所示:
string curveName = "P-521";
X9ECParameters ecP = NistNamedCurves.GetByName(curveName);
ECDomainParameters ecSpec = new ECDomainParameters(ecP.Curve, ecP.G, ecP.N, ecP.H, ecP.GetSeed());
IAsymmetricCipherKeyPairGenerator g = GeneratorUtilities.GetKeyPairGenerator("ECDH");
g.Init(new ECKeyGenerationParameters(ecSpec, new SecureRandom()));
AsymmetricCipherKeyPair aKeyPair = g.GenerateKeyPair();
Run Code Online (Sandbox Code Playgroud)
我的目的是提取公钥和私钥,然后再重建密钥.我首先提取密钥如下:
byte[] privateKey = ((ECPrivateKeyParameters)aKeyPair.Private).D.ToByteArray();
byte[] publicKey = ((ECPublicKeyParameters)aKeyPair.Public).Q.GetEncoded();
Run Code Online (Sandbox Code Playgroud)
如何重新创建公钥和私钥参数以便我可以使用它们?在这个例子中,我重新创建私钥,然后签署数据字节数组.
public static byte[] SignData(byte[] data, byte[] privateKey)
{
string curveName = "P-521";
X9ECParameters ecP = NistNamedCurves.GetByName(curveName);
ECDomainParameters ecSpec = new ECDomainParameters(ecP.Curve, ecP.G, ecP.N, ecP.H, ecP.GetSeed());
ISigner signer = SignerUtilities.GetSigner("SHA-256withECDSA");
BigInteger biPrivateKey = new BigInteger(privateKey);
ECPrivateKeyParameters keyParameters = new ECPrivateKeyParameters(biPrivateKey, ecSpec); …
Run Code Online (Sandbox Code Playgroud)