有效的XML字符列表是众所周知的,如规范所定义:
#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
Run Code Online (Sandbox Code Playgroud)
我的问题是,通过使用Unicode常规类别,是否可以为此(或其反向)制作PCRE正则表达式而不实际对代码点进行硬编码.反向可能类似于[\ p {Cc}\p {Cs}\p {Cn}],除了不正确地覆盖换行符和制表符并错过其他一些无效字符.
例如,下面的正则表达式将导致失败报告lookbehind断言不是固定长度:
#(?<!(?:(?:src)|(?:href))=["\']?)((?:https?|ftp)://[^\s\'"<>()]+)#S
Run Code Online (Sandbox Code Playgroud)
这种限制不存在lookahead.
众所周知,现代正则表达式实现(最值得注意的是PCRE)与常规语法的原始概念几乎没有共同之处.例如,您可以解析无上下文语法的经典示例{a n b n ; n> 0}(例如aaabbb)使用此正则表达式(演示):
~^(a(?1)?b)$~
Run Code Online (Sandbox Code Playgroud)
我的问题是:你能走多远?是否也可以使用PCRE 解析上下文敏感的语法 {a n b n c n ; n> 0}(例如aaabbbccc)?
这个答案建议grep -P支持(?:pattern)语法,但它似乎对我不起作用(该组仍然被捕获并显示为匹配的一部分).我错过了什么吗?
我正在尝试grep -oP "(?:syntaxHighlighterConfig\.)[a-zA-Z]+Color" SyntaxHighlighter.js使用此代码,并期望结果如下:
wikilinkColor
externalLinkColor
parameterColor
...
Run Code Online (Sandbox Code Playgroud)
但相反,我得到:
syntaxHighlighterConfig.wikilinkColor
syntaxHighlighterConfig.externalLinkColor
syntaxHighlighterConfig.parameterColor
...
Run Code Online (Sandbox Code Playgroud) 我注意到在PHP正则表达式库中有ereg和preg之间的选择.有什么不同?是一个比另一个更快,如果是这样,为什么不慢的被弃用?
是否有任何情况下使用一个而不是另一个?
我正在尝试将我的小应用程序从Win XP和VS 2005移植到Win 7和VS 2010.
该应用程序在调试模式下编译并运行顺利,但在发布模式下,我收到以下错误:
pcrecpp.lib(pcrecpp.obj) : error LNK2038: mismatch detected for
'_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in LoginDlg.obj
Run Code Online (Sandbox Code Playgroud)
我应该在哪里开始检查?
我正在尝试使用preg_match搜索UTF8编码的字符串.
preg_match('/H/u', "\xC2\xA1Hola!", $a_matches, PREG_OFFSET_CAPTURE);
echo $a_matches[0][1];
Run Code Online (Sandbox Code Playgroud)
这应该打印1,因为"H"在字符串"¡Hola!"中的索引1处.但它打印2.所以它似乎并没有将主题视为UTF8编码的字符串,即使我在正则表达式中传递"u" 修饰符.
我在php.ini中有以下设置,其他UTF8函数正在运行:
mbstring.func_overload = 7
mbstring.language = Neutral
mbstring.internal_encoding = UTF-8
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.encoding_translation = Off
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我一直认为你不能在零宽度断言中使用重复量词(Perl Compatible Regular Expressions [PCRE]).但是,最近我发现你可以在前瞻断言中使用它们.
所以我的问题是:
PCRE正则表达式引擎在使用零宽度外观搜索时如何工作,从而无法使用重复量词?
以下是R中PCRE的一个简单示例:
# Our string
x <- 'MaaabcccM'
## Does it contain a 'b', preceeded by an 'a' and followed by zero or more 'c',
## then an 'M'?
grepl( '(?<=a)b(?=c*M)' , x , perl=T )
# [1] TRUE
## Does it contain a 'b': (1) preceeded by an 'M' and then zero or more 'a' and
## (2) followed by zero or more 'c' then an 'M'?
grepl( '(?<=Ma*)b(?=c*M)' , x …Run Code Online (Sandbox Code Playgroud) 有了PCRE,你怎么可以构造如果是一个字符串,将只匹配一个表达式不找到.
如果我使用grep(我不是),我会想要-v选项.
更具体的例子:我希望我的正则表达式匹配当且仅当字符串foo是不是对的字符串中.所以它会匹配bar但不会foobar.
我需要使用以下正则表达式来验证一些亚洲字符
$regexp = "/^[\-'\u2e80-\u9fff\sa-zA-Z.]+$/"; // with warning
$regexp = "/^[\-'\sa-zA-Z.]+$/"; // without warning
Run Code Online (Sandbox Code Playgroud)
preg_match()[function.preg-match]:编译失败:PCRE不支持\ L,\ l,\ N,\ P,\ p,\ U,\ u或\ X.
你知道如何更改正则表达式模式,以便我可以验证亚洲字符 \u2e80-\u9fff
我正在使用最新的XAMPP
Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1
Run Code Online (Sandbox Code Playgroud)
谢谢