`

RegEx之loodahead与lookbehind

阅读更多
首先说明:

1、哪边是前,哪边是后?
      不像我们阅读一本书,排在前面的是前,排在后面的是后。
      对于查找的游标(Cursor)来说,没有查找的是前,查找过的是后。

      look-ahead :向未查找的字符串中查找。
      look-behind :向已经查找过的字符串中查找。

2、loodahead 、lookbehind 出现之动机
      为什么这么写呢?这牵涉到 Cursor 的移动问题。
      这种操作并不移动 Cursor,不影响下一次查找。


一、Lookahead

向前匹配:(?=regEx)
> (regexp-match-positions #rx "grey(?=hound)"
    "i left my grey socks at the greyhound")
'((28 . 32))

    grey(?=hound): 该正则匹配 "grey",但是前面必须跟 "hound"。



向前不匹配:(?!regEx)
> (regexp-match-positions #rx"grey(?!hound)"
    "the gray greyhound ate the grey socks")
'((27 . 31))

    grey(?!hound): 该正则匹配 "grey",但是前面不能是 "hound"。





二、LookBehind


向后匹配:(?<=regEx)
> (regexp-match-positions #rx"(?<=grey)hound"
    "the hound in the picture is not a greyhound")
'((38 . 43))

    (?<=grey)hound: 该正则匹配 "hound",但后面必须是"grey"


向后不匹配:(?<!regEx)
> (regexp-match-positions #rx"(?<!grey)hound"
    "the greyhound in the picture is not a hound")
'((38 . 43))

    (?<!grey)hound: 该正则匹配 "hound",但后面不能是"grey"





注意:

JavaScript 不支持 lookbehind:(?<= ) or (?<! ),但是支持 lookahead: (?= ) or (?! ).






引用:
https://docs.racket-lang.org/guide/Looking_Ahead_and_Behind.html








-
转载请注明
原文出处:http://lixh1986.iteye.com/blog/2324010
















-



分享到:
评论

相关推荐

    regex.h regex.cpp

    `regex.h` 头文件是C语言中使用正则表达式的关键接口,它包含了所有与正则表达式相关的函数声明和宏定义。这些函数允许开发者在程序中进行模式匹配、分割字符串、替换等操作。其中最重要的函数可能包括: 1. `...

    linux下的C语言POSIX正则表达式头文件和源文件: regex.h regex.cpp

    在本主题中,我们将探讨`regex.h`头文件和`regex.cpp`源文件,以及如何在Visual Studio 2010或2012环境下编译它们。 首先,`regex.h`是包含POSIX正则表达式函数声明的头文件。在Linux中,这个头文件定义了几个关键...

    正则表达式测试工具regex101

    在IT行业中,掌握正则表达式是提高工作效率的关键技能之一。`regex101`是一个在线的正则表达式测试工具,它允许用户编写、测试和调试他们的正则表达式,以确保它们能够正确地匹配所需的数据。 `regex101`具有以下...

    C++正则表达式-regex类(不依赖其他库)

    1. **构造与初始化**:你可以通过传递一个字符串或字符数组来创建`std::regex`对象,这个字符串定义了你要匹配的正则表达式模式。例如,`std::regex pattern("hello world")`创建了一个匹配"hello world"的正则...

    Cpp regex usge demo

    在C++编程语言中,正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,用于模式匹配、查找、替换和提取字符串中的特定模式。STL(Standard Template Library)库是C++的一个重要组成部分,它...

    mingw下64位的regex.dll

    64位的regex.dll 在mingw环境下编译成的,大家可以使用

    regex++ document (boost)

    2. 编译与匹配:`regex++`库提供了编译正则表达式字符串为对象的功能,然后通过这个对象进行匹配操作。例如,`boost::regex re("pattern")`编译正则,`boost::regex_match(str, re)`检查字符串是否匹配。 三、`...

    GNU regex windows编译

    5. **测试与使用**:编译完成后,你可以通过编写简单的测试程序来验证regex库的功能。在项目中使用regex2dll时,需要确保链接了该库,并正确包含了所需的头文件。 GNU regex库提供了丰富的正则表达式功能,包括但不...

    TestRegex_regex_C#_

    "TestRegex_regex_C#" 这个标题表明我们有一个简单的应用,其目的是测试C#中字符串与正则表达式的匹配。 描述中提到“Simple application for test string regex”,这暗示该程序可能包含一个用户界面,允许用户...

    Regex Expression(正则表达式)

    Regular expression 具有可以表达出难以描述、複杂、但是却有特殊规则的字串的功能,所以许多的 UNIX 工具程式都有支援 Regular expression 的功能。例如 ex 、 vi 、 sed 、 awk 、 grep ...这里有文件Regex.h,Regex.c

    RegEX Tester下载及使用

    正则表达式(Regular Expression,简称RegEX)是一种强大的文本处理工具,用于匹配、查找、替换等操作。在编程和数据分析领域,正则表达式扮演着至关重要的角色。"RegEX Tester"是一款实用的工具,它能帮助用户方便...

    正则表达式(regex)C语言源码,超强查找/替换算法

    C语言与正则表达式** 在C语言中,没有内置的正则表达式支持。开发者通常需要引入外部库,如Henry Spencer的regex library,来实现这些功能。这个库通过头文件(如`JRegex.h`)提供函数接口,程序员可以通过调用...

    Linux下regex移植,Linux和windows可通用

    POSIX与C++标准库的regex** 在Linux下,我们习惯于使用POSIX的regex函数,如: ```c++ #include &lt;regex.h&gt; regex_t regex_object; int reti = regcomp(&regex_object, "pattern", REG_EXTENDED); int match = ...

    boost.regex手册

    `test_mfc.cpp`可能涉及到在Microsoft Foundation Classes (MFC)环境下使用Boost.regex,而`test_icu.cpp`可能与Unicode Collation Algorithm (ICA)集成有关,展示了Boost.regex与其他库的互操作性。 通过研究这些...

    C++Boost的Regex库用法

    其中,Boost的Regex库是处理文本数据的强大工具,它允许程序员编写正则表达式,以匹配、查找和替换字符串中的特定模式。正则表达式是一种强大的文本处理工具,它通过使用专门的语法来描述一定数量的文本模式,允许...

    C++Regex正则表达式

    2. **匹配与迭代**:通过 `std::regex_match` 或 `std::regex_search` 进行全匹配或部分匹配,或者使用迭代器遍历匹配结果。 ```cpp std::string str = "匹配的字符串"; if (std::regex_match(str, reg)) { ... } ...

    Regex Tester

    下面将详细介绍Regex Tester以及与之相关的正则表达式知识。 1. **Regex Tester的用途** - **测试正则表达式**:Regex Tester允许用户输入正则表达式,并在指定的文本上进行匹配测试,实时查看结果。 - **调试**...

    超好用的正则表达式测试工具Code Architects Regex Tester

    当按下F5键后,工具会高亮显示与正则表达式匹配的部分。在本例中,"55xycyvvvvvvv"会被识别为匹配项,因为它完全符合`^\w+$`的模式,而"666"则不会,因为它以空格开头,不符合`^`表示的字符串开始。 使用Code ...

    正则表达式测试工具RegexTester 中文版

    正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、搜索和...只需运行压缩包内的"RegexTester.exe"文件,即可启动这款强大的工具,开始你的正则表达式探索之旅。

    regex test.zip_regex

    - `std::regex_match(str, match_result, regex)`用于检查整个字符串是否与正则表达式完全匹配,而`std::regex_search(str, match_result, regex)`则查找第一个匹配的子串。 4. **替换操作**: - `std::regex_...

Global site tag (gtag.js) - Google Analytics