正则表达式引擎位于何处?

时间:2017-02-27 23:00:58

标签: regex linux bash awk sed

我们在课堂上讨论sed,我想知道sed使用正则表达式引擎的方式。每个程序(sed,awk,grep等)是否使用编程到其中的正则表达式引擎,或者是否有正在开发sed,grep等的个人正在其代码中实现的正则表达式引擎工具/库/函数?引擎是否内置于操作系统中,然后由使用它的工具调用?我想知道这将有助于我理解正则表达式所达到的标准化水平。 是谁造的,正则表达式引擎?你的源代码在哪里?

1 个答案:

答案 0 :(得分:2)

默认情况下,sedgrep都理解GNU Basic Regular Expressions符号,它是POSIX Basic Regular Expressions标准的实现。 POSIX只是Unix系统应该订阅的标准,但它可以以任何方式实现 此外,sed -rgrep -eegrep了解GNU扩展正则表达式表示法及其实现。
有关基本和扩展的正则表达式详细信息,请参阅http://www.regular-expressions.info/gnu.html

还有PCREPCRE2是Perl兼容的正则表达式。这是一个用C / C ++实现的完整库,可以用作其他C / C ++软件的标准实现。 PHP和pgrep使用它。 grep也可以-P使用此grep已提供grep -P已编译PCRE支持。 (不是100%肯定,但我认为pgrep在这种情况下只是在内部调用sed。)
您可以在http://www.regular-expressions.info/pcre.htmlhttp://www.regular-expressions.info/pcre2.html

阅读详细信息

除此之外,许多语言和工具都有自己的正则表达式引擎。 Perl,Python,Java,JavaScript,SQL数据库都有自己的正则表达式实现或借用其他实现。虽然他们有相同的概念,但他们的符号和实现可能会大不相同。 http://www.regular-expressions.info/tools.html列出了许多实现正则表达式的软件。

回答您提出的一些具体问题:

操作系统不在内核中实现任何正则表达式引擎。正则表达式实现与硬件无关,并且不需要任何类型的保护,资源管理或低级访问,这是操作系统内核主要处理的问题。所以内核不需要干预。

正则表达式引擎和源代码会因实现而异。您可以通过深入了解软件源代码的正则表达式特定模块(如果可用)来获取源代码。但是没有“一个戒指可以统治所有人”。

一个好的开始方法是熟悉一个正则表达式实现。 GNU Extended是一个很好的起点,因为它由grepawkimport { AUTH_SUCCESS, AUTH_FAILURE, AUTH_STARTED, AUTH_ERROR, AUTH_FAILURE_REMOVE, LOGOUT } from '../actions/types'; const initialState = { authenticating: false, authToken: null, authError: null, facebookToken: null, facebookProfile: null } function authReducer(state = initialState, action) { switch(action.type) { case AUTH_STARTED: return Object.assign({}, state, { authenticating: true, loginText: 'Connexion..' }); case AUTH_SUCCESS: return Object.assign({}, state, { authenticating: false, authToken: action.authToken, facebookToken: action.facebookToken, facebookProfile: action.facebookProfile, }); case AUTH_FAILURE: return Object.assign({}, state, { authenticating: false, authError: action.authError.message, }); case AUTH_FAILURE_REMOVE: return Object.assign({}, state, { authError: null, }); case LOGOUT: return Object.assign({}, state, { authenticating: false, authToken: null, facebookToken: null, facebookProfile: null, loginText: null, }); default: return state; } } export default authReducer; 共享。 Gnulib的http://www.gnu.org/software/gnulib提供了源代码。之后,您可以尝试学习其他实现的更高级功能。

希望这有帮助!