我们在课堂上讨论sed,我想知道sed使用正则表达式引擎的方式。每个程序(sed,awk,grep等)是否使用编程到其中的正则表达式引擎,或者是否有正在开发sed,grep等的个人正在其代码中实现的正则表达式引擎工具/库/函数?引擎是否内置于操作系统中,然后由使用它的工具调用?我想知道这将有助于我理解正则表达式所达到的标准化水平。 是谁造的,正则表达式引擎?你的源代码在哪里?
答案 0 :(得分:2)
默认情况下,sed
和grep
都理解GNU Basic Regular Expressions符号,它是POSIX Basic Regular Expressions标准的实现。 POSIX只是Unix系统应该订阅的标准,但它可以以任何方式实现
此外,sed
-r
和grep
-e
或egrep
了解GNU扩展正则表达式表示法及其实现。
有关基本和扩展的正则表达式详细信息,请参阅http://www.regular-expressions.info/gnu.html。
还有PCRE
和PCRE2
是Perl兼容的正则表达式。这是一个用C / C ++实现的完整库,可以用作其他C / C ++软件的标准实现。 PHP和pgrep
使用它。 grep
也可以-P
使用此grep
已提供grep -P
已编译PCRE支持。 (不是100%肯定,但我认为pgrep
在这种情况下只是在内部调用sed
。)
您可以在http://www.regular-expressions.info/pcre.html和http://www.regular-expressions.info/pcre2.html
除此之外,许多语言和工具都有自己的正则表达式引擎。 Perl,Python,Java,JavaScript,SQL数据库都有自己的正则表达式实现或借用其他实现。虽然他们有相同的概念,但他们的符号和实现可能会大不相同。 http://www.regular-expressions.info/tools.html列出了许多实现正则表达式的软件。
回答您提出的一些具体问题:
操作系统不在内核中实现任何正则表达式引擎。正则表达式实现与硬件无关,并且不需要任何类型的保护,资源管理或低级访问,这是操作系统内核主要处理的问题。所以内核不需要干预。
正则表达式引擎和源代码会因实现而异。您可以通过深入了解软件源代码的正则表达式特定模块(如果可用)来获取源代码。但是没有“一个戒指可以统治所有人”。
一个好的开始方法是熟悉一个正则表达式实现。 GNU Extended是一个很好的起点,因为它由grep
,awk
和import {
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提供了源代码。之后,您可以尝试学习其他实现的更高级功能。
希望这有帮助!