我正在尝试在我的Ubuntu 11.10服务器上安装PCRE.当我运行"make"命令时,我得到一个非常长的输出,它始终以此错误结束:
libtool: link: ( cd ".libs" && rm -f "libpcreposix.la" && ln -s "../libpcreposix.la" "libpcreposix.la" ) source='pcrecpp.cc' object='pcrecpp.lo' libtool=yes \
DEPDIR=.deps depmode=none /bin/bash ./depcomp \
/bin/bash ./libtool --tag=CXX --mode=compile -DHAVE_CONFIG_H -I. -c -o pcrecpp.lo pcrecpp.cc libtool: compile: unrecognized option `-DHAVE_CONFIG_H' libtool: compile: Try `libtool
--help' for more information. make[1]: *** [pcrecpp.lo] Error 1 make[1]: Leaving directory `/home/root/src/pcre/pcre-8.12' make:
*** [all] Error 2
Run Code Online (Sandbox Code Playgroud)
我确实运行了"configure".有任何想法吗?
我必须在Python中解析基于PCRE的一些字符串,我不知道该怎么做.
我要解析的字符串看起来像:
match mysql m/^.\0\0\0\n(4\.[-.\w]+)\0...\0/s p/MySQL/ i/$1/
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我必须得到这个不同的项目:
"m/^.\0\0\0\n(4\.[-.\w]+)\0...\0/s" ; "p/MySQL/" ; "i/$1/"
Run Code Online (Sandbox Code Playgroud)
我发现在Python中唯一与PCRE操作相关的是这个模块:http://pydoc.org/2.2.3/pcre.html(但它写的是.so文件......)
你知道是否存在一些Python模块来解析这种字符串吗?
我有一个带有空值的文本源,我需要将它们与我的正则表达式模式一起拉出来.正则表达式甚至可以匹配空字符吗?
当我的模式拒绝匹配时,我才意识到我拥有它们,当我将它粘贴到Notepad ++中时,它显示了所有空字符.
如果没有其他原因,当我输入'('我几乎总是想要一个分组操作符时,我承认喜欢PCRE正则表达式比使用emacs更好的偏见.当然,\ w和类似的东西比使用它更方便其他等价物.
但是,当然,期望改变emacs的内部结构会很疯狂.但我认为应该可以从PCRE表达式转换为emacs表达式,并执行所有需要的转换,以便我可以编写:
(defun my-super-regexp-function ...
(search-forward (pcre-convert "__\\w: \d+")))
Run Code Online (Sandbox Code Playgroud)
(或类似的).
有人知道可以做到这一点的elisp库吗?
编辑:从以下答案中选择回复...
哇,我喜欢从4天的休假回来,找到一系列有趣的答案!我喜欢这两种解决方案的工作.
最后,看起来exec-a-script和直接elisp版本的解决方案都可以工作,但从纯粹的速度和"正确性"方法来看,elisp版本肯定是人们更喜欢的版本(包括我自己) .
在下面的例子中(通过regex101.com,PCRE模式),我无法弄清楚为什么+量词找到一个子串但*没有.
在第一个插图中,+量词(1或更多)找到所有四个小写的字符(这是我所期望的):
在第二个图中,*量词(0或更多)未找到任何小写一个字符(这不是我所期望的):
正则表达式是什么逻辑解释了为什么"1个或多个"(+)发现所有四个小写一个字符,但"0或更多"(*)未找到任何?
我刚刚编写了一个正则表达式,用于preg_match包含以下部分的php函数:
[\w-.]
Run Code Online (Sandbox Code Playgroud)
匹配任何单词字符,以及减号和点.虽然它似乎在preg_match中工作,但我试图将它放入一个名为Reggy的实用程序中并且它抱怨"char类中的空范围".试验和错误告诉我这个问题是通过逃避减号来解决的,将正则表达式转化为
[\w\-.]
Run Code Online (Sandbox Code Playgroud)
由于原来似乎在PHP中工作,我想知道为什么我应该或不应该逃避减号,并且 - 因为点也是一个在PHP中有意义的字符 - 为什么我不需要逃避点.我正在使用的实用程序是愚蠢的,它是否与另一个正则表达式方言一起使用或者我的正则表达式是否真的不正确而且我很幸运preg_match让我逃脱它?
在PHP中,您可以使用正则表达式(PCRE)压缩/缩小CSS吗?
(作为正则表达式中的理论.我确信那里有很好的库可以做到这一点.)
背景说明:花了好几个小时写了一个删除(半废话)问题的答案后,我想我会发布一部分基本问题并自己回答.希望没关系.
我最近在PCRE- (Perl兼容的正则表达式)文档中阅读并且遇到了一些有规则表达的有趣技巧.当我继续阅读并耗尽自己时,我因为使用一些(*...)模式而产生了一些混乱而停止了.
我的问题和困惑与(*PRUNE)和(*FAIL)
现在对于参考(*SKIP)行为(*PRUNE),除了如果模式是未锚定的,则不等于前一个字符,而是到达主题中遇到的位置(*SKIP).
文档说明如果模式的其余部分不匹配,则(*PRUNE)导致匹配在主题中的当前起始位置失败.它表示否定断言的(*FAIL)同义词(?!).在模式中的给定位置强制匹配失败.
所以基本上(*FAIL)表现得像一个失败的否定断言,并且是一个同义词(?!)
并且如果存在导致回溯到达的后续匹配故障,则导致匹配在主题(*PRUNE)中的当前起始位置处失败.
当谈到失败的时候,这些有何不同?
任何人都可以提供如何正确实施和使用这些示例吗?
我猜它不是Perl兼容的正则表达式,因为有一种特殊的grepPCRE.什么grep最相似?
grep我需要了解一些特殊的怪癖吗?(我习惯了Perl和pregPHP中的函数)
在我的语言环境(et_EE)中[a-z]表示:
abcdefghijklmnopqrsšz
Run Code Online (Sandbox Code Playgroud)
因此,不包括6个ASCII字符(tuvwxy)和一个来自爱沙尼亚字母(ž).我看到很多模块仍在使用正则表达式
/\A[0-9A-Z_a-z]+\z/
Run Code Online (Sandbox Code Playgroud)
对我来说,似乎错误的方式来定义ASCII字母数字字符的范围,我认为它应该替换为:
/\A\p{PosixAlnum}+\z/
Run Code Online (Sandbox Code Playgroud)
第一个仍然被认为是惯用的方式吗?或接受解决方案?还是一个bug?
或者最后一个警告?