标签: regex-lookarounds

正则表达式:正面前瞻和单词边框问题

你好再次Stackoverflow人!

假设我有这些话:智能手机,智能手机

我想匹配其中的子串"phone".但是,在这两种情况下,我只想要返回"电话",而不是第一种情况下的"电话".除此之外,我只想在单词"phone"只是后缀时才需要匹配,这样:

fonephonetics(仅举例)不匹配.

我假设正则表达式

(phone([?=s])?)\b
Run Code Online (Sandbox Code Playgroud)

会给我我需要的东西,但它目前正在匹配"手机"和"手机",而不是"fonephonetics".我不需要"手机".对于这两种情况我都想要"电话".

关于什么是错的,我能做什么的任何想法?

先感谢您!

regex regex-lookarounds

2
推荐指数
1
解决办法
1001
查看次数

否定的前瞻性正则表达式无效

input1="caused/VBN by/IN thyroid disorder"
Run Code Online (Sandbox Code Playgroud)

要求:找到"caused"后跟斜线后跟任意数量的大写字母的单词- 后面跟不上空格+ "by/IN.

在上面的示例中,"caused/VBN"后面跟着" by/IN",因此'cause'不匹配.

input2="caused/VBN thyroid disorder" 
Run Code Online (Sandbox Code Playgroud)

"by/IN" 不遵循造成的,所以它应该匹配

regex="caused/[A-Z]+(?![\\s]+by/IN)"
Run Code Online (Sandbox Code Playgroud)

caused/[A-Z]+- 单词'引起'+/+一个或多个大写字母
(?![\\s]+by)- 负向前瞻 - 不匹配空格和

以下是我用来测试的简单方法

public static void main(String[] args){
    String input = "caused/VBN by/IN thyroid disorder";

    String regex = "caused/[A-Z]+(?![\\s]+by/IN)";

    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(input);

    while(matcher.find()){
        System.out.println(matcher.group());
    }
Run Code Online (Sandbox Code Playgroud)

输出: caused/VB

我不明白为什么我的负面前瞻正则表达式不起作用.

java regex regex-negation regex-lookarounds

2
推荐指数
1
解决办法
2936
查看次数

在JavaScript正则表达式中使用前瞻匹配可选组

我正在尝试用正则表达式解决字符串匹配问题.我需要匹配此表单的网址:

http://soundcloud.com/okapi23/dont-turn-your-back/
Run Code Online (Sandbox Code Playgroud)

我需要"拒绝"此表单的网址:

http://soundcloud.com/okapi23/sets/happily-reversed/
Run Code Online (Sandbox Code Playgroud)

尾随'/'显然是可选的.

所以基本上:

  • 在主机名之后,可以有2或3个组,如果在第二个组中等于 "sets",则正则表达式不应该匹配.
  • "sets"可以包含在URL中的任何其他位置
  • "集合"需要完全匹配

到目前为止我提出的是http(s)?://(www\.)?soundcloud\.com/.+/(?!sets)\b(/.+)?失败的.

有什么建议?是否有任何库可以简化任务(例如,使尾部斜杠可选)?

javascript regex regex-greedy regex-lookarounds

2
推荐指数
1
解决办法
885
查看次数

验证正则表达式中的多个条件

我或多或少是一个正则表达式的新手.我试图将以下条件变为正则表达式:

  • 在字符串的开头和结尾没有空格
  • 允许所有数字
  • 允许空格,点,括号,加号和减号

导致以下正则表达式:

^\S[\d\/. ()\-+]*\S$
Run Code Online (Sandbox Code Playgroud)

但现在我尝试应用另外两个条件:

  • 只允许一两个+
  • 只允许一个(和一个)

我的问题是如何将这两个条件合并到现有的正则表达字符串上面cuz排除+ [+]{1,2}和()[(]{1} [)]{1}没有多大意义因为我尝试以无特定顺序制作一般语句,以便我能够链接它.谢谢拉尔夫

regex regex-negation regex-lookarounds

2
推荐指数
1
解决办法
2万
查看次数

正则表达式预测在.NET中不起作用

我有一个与Regexr.com一起使用的前瞻性Regex,但在.NET应用程序中使用它时却没有.

这是一些示例输入数据(请注意,我只是为了可读性而创建了行中断,文本实际上只是一个长行,因此需要一个正则表达式).

26. AUG\r\n2014\r\n27.08 Testing 1\r\n -100\r\n
20. AUG\r\n2014\r\n27.08 Testing 2\r\n -90\r\n
15. AUG\r\n2014\r\n27.08 Testing 3\r\n 200\r\n
9. AUG\r\n2014\r\n27.08 Testing 4\r\n 50\r\n
4. AUG\r\n2014\r\n27.08 Testing 5\r\n -200\r\n
25. JUL\r\n2014\r\n27.08 Testing 5\r\n -200\r\n
Run Code Online (Sandbox Code Playgroud)

使用以下正则表达式:

(.+?)(?=(\\r\\n\d{1,2}[.] [A-Z]{3})|$)
Run Code Online (Sandbox Code Playgroud)

,我希望捕获每一行,想要用"20. AUG"分隔它们等等.由于也应该捕获分隔符,我使用前瞻.Regexr.com上的一切都很棒,例如:http://regexr.com/39fd7

在.NET中执行此操作时:

Regex.Matches(input, "(.+?)(?=(\r\n\\d{1,2}[.] [A-Z]{3})|$)")
Run Code Online (Sandbox Code Playgroud)

我只得到这些结果:

-100
-90
200
50
-200
-200
Run Code Online (Sandbox Code Playgroud)

我尝试过各种RegexOptions,比如multiline和其他一些,但没有结果.

任何帮助或提示都非常感谢.谢谢

.net c# regex regex-lookarounds

2
推荐指数
1
解决办法
473
查看次数

积极的前瞻没有按预期工作

我有以下正则表达式,具有积极的前瞻性:

/black(?=hand)[ s]/
Run Code Online (Sandbox Code Playgroud)

我希望它能与黑人黑手相匹配.但是,它与任何东西都不匹配.我在Regex101测试.

我究竟做错了什么?

regex regex-lookarounds

2
推荐指数
1
解决办法
1110
查看次数

除特定数字之外的任何数字的正则表达式

我想制作一个正则表达式,捕获每个整数(正数和负数),只要它不是以下之一:-2,-1,0,1,2或10.

所以这些应该匹配:-11,8,-4,11,15,121,3等.

到目前为止,我有这个正则表达式: /-?([^0|1|2|10])+/

它捕获了负号,但是当数字为-2或-1时它仍然会这样做,这是我不想要的.此外,它没有捕获11.

我应该如何更改表达式以匹配我想要查找的数字.另外,有没有更好的方法在字符串中找到这些数字?

javascript regex string regex-negation regex-lookarounds

2
推荐指数
1
解决办法
157
查看次数

正则表达式在Java中搜索{{和}}之间的关键字

Java 之间{{和之间的Regex搜索关键字是什么?}}

String = "kksdkjhsd {{one}} sdkjhsdjksd {{two}}" 我想要的例子output = ["one","two"];

我已经尝试过在Java Regex中建议的方法来获取大括号之间的数据.

单支撑可以正常工作,但我不能将它扩展为双花({{ }})括号

java regex regex-lookarounds

2
推荐指数
1
解决办法
747
查看次数

匹配模式,只要它不包含特定字符串

假设我有以下字符串:

quiz.1.player.chat_resultspartner_quiz.1.player.chat_results

我有成百上千个这样的字符串,唯一的区别是一个以“ partner”为前缀,而另一个则没有。我正在尝试匹配一个而不是另一个。

我要匹配的特定模式如下所示:

index <- grep('^(quiz.)[1-5]{1}.player.chat_results', names(data))
Run Code Online (Sandbox Code Playgroud)

但这将匹配两个字符串。我猜我必须像这样使用一些负面的前瞻:

^((?!partner).) 
Run Code Online (Sandbox Code Playgroud)

但是我不确定在哪里使用它。

regex r regex-lookarounds

2
推荐指数
1
解决办法
75
查看次数

vimgrep可以与环视断言一起使用吗?

我正在尝试在一个大型JavaScript项目上自动执行一些文本操作,并希望使用跳转到匹配项vimgrep,随后将进行各种宏调用。

我的目标行如下所示:

getText("foo", 1)
Run Code Online (Sandbox Code Playgroud)

但是,不是这样的:

getText("foo")
getText("foo", [1])
Run Code Online (Sandbox Code Playgroud)

我只想匹配getText具有多个参数(未包含在数组中)的用法。

这种/使用否定前瞻的搜索查询()似乎有效:

getText(.*",\(.*[\)\@!
Run Code Online (Sandbox Code Playgroud)

但是,使用以下命令运行此正则表达式vimgrep

:vimgrep /getText(.*",\(.*[\)\@!/ project/src/**/*.js
Run Code Online (Sandbox Code Playgroud)

...失败,显示以下消息:

E682: Invalid search pattern or delimiter
Run Code Online (Sandbox Code Playgroud)

我怀疑正则表达式的超前部分是原因,因为删除它后错误消失了。

有没有办法利用环顾断言vimgrep

vim vimgrep regex-lookarounds

2
推荐指数
1
解决办法
30
查看次数