- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用负后视来对将从我们与之交谈的另一个系统发送到系统中的字符串进行一些匹配。我已经搜索过类似的问题,但我无法根据之前发布的任何问题解决这个问题。
这按预期工作
Pattern pattern = Pattern.compile ("^(?<!SyCs-)([A-Za-z\\s\\d]+)$");
String s = "SyCs-a";
Assert.assertEquals (false, pattern.matcher (s).matches ());
这就是问题所在:对于当前的正则表达式,以下内容也返回 false,这是有道理的,因为 '-'(破折号)不是允许值的一部分 ([A-Za-z\s\d] +)。
s = "TyCs-a";
Assert.assertEquals (false, pattern.matcher (s).matches ());
但是,我需要它返回 true,但是当我将破折号添加到允许的值时,第一个 String 也会返回 true。
没有破折号
Pattern pattern = Pattern.compile ("^(?<!SyCs-)([A-Za-z\\s\\d]+)$");
String s = "SyCs-a";
Assert.assertEquals (false, pattern.matcher (s).matches ());
s = "TyCs-a";
Assert.assertEquals (false, pattern.matcher (s).matches ());
带破折号
Pattern pattern = Pattern.compile ("^(?<!SyCs-)([A-Za-z\\s\\d-]+)$");
String s = "SyCs-a";
Assert.assertEquals (true, pattern.matcher (s).matches ());
s = "TyCs-a";
Assert.assertEquals (true, pattern.matcher (s).matches ());
我试过让 + 不贪心 +?但这根本不会改变结果。
有什么建议吗?
这是我用来验证正则表达式的整套测试
@Test
public void testNegativeLookBehind () {
Pattern pattern = Pattern.compile ("^(?<!SyCs-)([A-Za-z\\s\\d]+)$");
String s = "SyCs-a";
Assert.assertEquals (false, pattern.matcher (s).matches ());
s = "SyCs-b";
Assert.assertEquals (false, pattern.matcher (s).matches ());
s = "SyCs-ab";
Assert.assertEquals (false, pattern.matcher (s).matches ());
s = "SyCs-ab1";
Assert.assertEquals (false, pattern.matcher (s).matches ());
s = "SyCs-abZ";
Assert.assertEquals (false, pattern.matcher (s).matches ());
s = "SyCs- abZ";
Assert.assertEquals (false, pattern.matcher (s).matches ());
s = "SyCs ab1";
Assert.assertEquals (true, pattern.matcher (s).matches ());
/*s = "TyCs-a";
Assert.assertEquals (true, pattern.matcher (s).matches ());
s = "SyCr-a";
Assert.assertEquals (true, pattern.matcher (s).matches ());
*/
s = "ab";
Assert.assertEquals (true, pattern.matcher (s).matches ());
s = "sab";
Assert.assertEquals (true, pattern.matcher (s).matches ());
s = "Csab";
Assert.assertEquals (true, pattern.matcher (s).matches ());
s = "yCsab";
Assert.assertEquals (true, pattern.matcher (s).matches ());
s = "SyCsab";
Assert.assertEquals (true, pattern.matcher (s).matches ());
}
最佳答案
(?<!SyCs-)
如果存在 CyCs-
,则为否定后视,匹配失败紧靠当前位置的左侧。由于当前位置是字符串 (^
) 的开头,lookbehind always 返回 true 并且毫无用处。
你需要在这里使用前瞻,而不是后视:
String pat = "^(?!SyCs-)[A-Za-z\\s\\d-]+$";
^^^^^^^^^
参见 regex demo .
^(?!SyCs-)
将检查字符串是否以 SyCs-
开头如果是,匹配将失败。
请注意,如果您将模式与 .matches()
一起使用方法,你可以省略 ^
和 $
模式中的 anchor ,因为该方法需要完整的字符串匹配。
关于java - 为什么我的负面回顾在 Java 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46247073/
这有点相关:Regular Expression - Formatting text in a block - IM而是一个不同的问题。 根据以下条件寻找 - 的换行文本: 条件: token 可以在
使用 Ruby,我想找到一个正确识别句子边界的正则表达式,我将其定义为以 [.!?] 结尾的任何字符串,除非这些标点符号存在于引号内,如 My friend said "John isn't here
有没有办法在 VBA 正则表达式中进行负面和正面回顾? 如果字符串以“A”开头,我想不匹配,所以我目前在模式的开头执行 ^A,然后删除 match(0) 的第一个字符。显然不是最好的方法! 我正在使用
我正在尝试使用模式替换一些字符串,但我不知道如何检查字符串之前是否有点。.some 应该是负数,some 应该是正数 var a = "some.string is replaced and .so
Random rand = new Random(); Observable random1 = Observable.just(rand.nextInt()); Observable random2
我希望有人可以检查我的正则表达式,以确保它正在执行我希望它执行的操作。 所以这就是我所追求的: 在单词边界内搜索单词 - 因此它可以是单独的单词,也可以是另一个单词中的单词 获取前面的 30 个字符(
我创建了以下触发器来跟踪 postgres 表上的所有更改。 DROP TRIGGER tr_request_update_notify ON requests; CREATE OR REPLACE
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 2年前关闭。 Improve this questi
这是我的代码: import com.google.gson.JsonElement; import com.rallydev.lookback.LookbackApi; import com.ral
我想创建类似 facebook lookback 的系统,但我不知道。 https://facebook.com/lookback/ 它通过一些带有一些效果的图片生成视频。 你有什么想法可以创造类似的
使用 meteor 1.5.2我安装了最新的 Lookback:meteor-seo 插件,但收到此错误 lookback_seo.js?hash=a658c0f8fd82680b329114c5e6
这里是 HelloGitHub 出品的年度盘点系列,本期我们将盘点 GitHub 在 2020 发生的大事件,回顾一下今年 GitHub 给我们带来了那些惊喜。故事的开始我们要回到一年前从 GitH
最近,我无法使用过去曾与我的帐户一起使用过的 Lookback API 的应用程序。查看控制台后,似乎在向服务器发出请求时出现错误 403。我有一些同事也尝试访问 API,但我们都收到了同样的错误。
gcc 4.4.4 c89 在使用结构体隐藏实现文件中的元素时,我总是这样做。 port.h头文件 struct port_tag; struct port_tag* open_ports(size_
我是一名优秀的程序员,十分优秀!