标签: pcre

在PCRE/PHP中匹配Unicode字母字符

我正在尝试为PHP中的名称编写一个合理宽松的验证器,我的第一次尝试包含以下模式:

// unicode letters, apostrophe, hyphen, space
$namePattern = "/^([\\p{L}'\\- ])+$/";
Run Code Online (Sandbox Code Playgroud)

这最终传递给了一个电话preg_match().据我所知,这适用于你的vanilla ASCII字母表,但似乎惹上像Ă或张这样的尖锐字符.

这个模式本身有什么问题吗?也许我期待\p{L}比我想的更多的工作?

或者它与传入输入的方式有关?我不确定它是否相关,但我确实确保在表单页面上指定UTF8编码.

php regex unicode pcre character-properties

14
推荐指数
1
解决办法
1万
查看次数

PCRE正则表达到SED

我正在尝试使用PCRE正则表达式并在SED中使用它,但我遇到了一些问题.请注意,这个问题代表了一个更大的问题(如何将PCRE正则表达式转换为与SED一起使用)所以问题不仅仅是关于下面的示例,而是关于如何在SED正则表达式中使用PCRE正则表达式作为一个整体.

此示例从一行中提取电子邮件地址,并将其替换为"[emailaddr]".

echo "My email is abc@example.com" | sed -e 's/[a-zA-Z0-9]+[@][a-zA-Z0-9]+[\.][A-Za-z]{2,4}/[emailaddr]/g'
Run Code Online (Sandbox Code Playgroud)

我试过以下替换正则表达式:

([a-zA-Z0-9]+[@][a-zA-Z0-9]+[\.][A-Za-z]{2,4})
[a-zA-Z0-9]+[@][a-zA-Z0-9]+[\.][A-Za-z]{2,4}
([a-zA-Z0-9]+[@][a-zA-Z0-9]+[.][A-Za-z]{2,4})
[a-zA-Z0-9]+[@][a-zA-Z0-9]+[.][A-Za-z]{2,4}
Run Code Online (Sandbox Code Playgroud)

我已经尝试将sed的分隔符从s/find/replace/g更改为s | find | replace | g,如此处所述(堆栈溢出:pcre regex到sed regex).

我仍然无法弄清楚如何在SED中使用PCRE正则表达式,或者如何将PCRE正则表达式转换为SED.任何帮助都会很棒.

regex pcre sed

14
推荐指数
3
解决办法
2万
查看次数

使用PCRE匹配n> 0的^ nb ^ nc ^ n

如何将n> 0的^ nb ^ nc ^ n与PCRE匹配?

以下情况应符合:

abc
aabbcc
aaabbbccc
Run Code Online (Sandbox Code Playgroud)

以下情况不符合:

abbc
aabbc
aabbbccc
Run Code Online (Sandbox Code Playgroud)

这是我"尝试过"的东西; /^(a(?1)?b)$/gmx但这匹配n> 0的^ nb ^ n:

ab
aabb
aaabbb
Run Code Online (Sandbox Code Playgroud)

Online demo

注意:这个问题是一样的这一个与语言的变化.

regex pcre

14
推荐指数
2
解决办法
2806
查看次数

ERE - 将量词添加到具有内部组和反向引用的组

试图连续重复的字母出现两次或三次.无法使用ERE找到使用量词和捕获组的方法

$ grep --version | head -n1
grep (GNU grep) 2.25

$ # consecutive repeated letters occurring twice
$ grep -m5 -xiE '[a-z]*([a-z])\1[a-z]*[a-z]*([a-z])\2[a-z]*' /usr/share/dict/words
Abbott
Annabelle
Annette
Appaloosa
Appleseed

$ # no output for this, why?
$ grep -m5 -xiE '([a-z]*([a-z])\2[a-z]*){2}' /usr/share/dict/words
Run Code Online (Sandbox Code Playgroud)


与工作-P虽然

$ grep -m5 -xiP '([a-z]*([a-z])\2[a-z]*){2}' /usr/share/dict/words
Abbott
Annabelle
Annette
Appaloosa
Appleseed

$ grep -m5 -xiP '([a-z]*([a-z])\2[a-z]*){3}' /usr/share/dict/words
Chattahoochee
McConnell
Mississippi
Mississippian
Mississippians
Run Code Online (Sandbox Code Playgroud)


感谢Casimir et Hippolyte提出更简单的输入和正则表达式来测试这种行为

$ echo 'aazbb' | grep -E '(([a-z])\2[a-z]*){2}' || …
Run Code Online (Sandbox Code Playgroud)

regex grep pcre gnu sed

14
推荐指数
1
解决办法
363
查看次数

RegEx:\ w - UTF-8中的"_"+" - "

我需要一个匹配UTF-8字母和数字的正则表达式,破折号(-)但不匹配下划线(_),我尝试了这些愚蠢的尝试但没有成功:

  • ([\w-^_])+
  • ([\w^_]-?)+
  • (\w[^_]-?)+

\w是简写[A-Za-z0-9_],但如果我有u修饰符集,它也匹配UTF-8字符.

任何人都可以帮我解决这个问题吗?

php regex unicode pcre utf-8

13
推荐指数
1
解决办法
3万
查看次数

检测是否在没有--enable-unicode-properties或--enable-utf8配置开关的情况下构建PCRE

我有一个PHP库,它使用了许多带有\P多字节字符串表达式的正则表达式,例如

((((?:\P{M}\p{M}*)+?)|(\'[^\']*\')|(\"[^\"]*\"))!)?\$?([a-z]{1,3})\$?(\d+)
Run Code Online (Sandbox Code Playgroud)

虽然这适用于大多数版本,但我有一些regexp返回错误的报告.

根据操作平台,PCRE的错误消息是:

编译失败:PCRE在偏移量n处不支持\ L,\ l,\ N,\ P,\ p,\ U,\ u或\ X

要么

编译失败:尚未在偏移量n处编译对\ P,\ p和\ X的支持

我知道我可以在我的代码的开头测试一个正则表达式,它使用\P并捕获返回的错误,然后使用该响应设置兼容性标志并提供降级(非UTF-8)正则表达式而不\P在主要内部我的代码的主体基于该兼容性标志.

我想知道是否有任何识别是否PCRE已经没有内置简单的方式--enable-unicode-properties--enable-utf8配置交换机.PHP提供对PCRE_VERSION常量的访问,但这无助于确定是否\P启用了支持.

php pcre utf-8

13
推荐指数
1
解决办法
4809
查看次数

Python正则表达式负面观察

该模式(?<!(asp|php|jsp))\?.*适用于PCRE,但它在Python中不起作用.

那么我该怎么做才能让这个正则表达式在Python中运行?(Python 2.7)

python regex pcre negative-lookbehind

13
推荐指数
1
解决办法
8543
查看次数

如何在Mac OSX上安装PCRE开发标题

我刚刚将我的MacBook Pro升级为Mavericks并且我的本地Ruby on Rails开发环境没有直接运行,当我访问时localhost我看到It works!并记得我需要启动Phusion Passenger,所以当我运行passenger start它时检查所有先决条件并失败当它到达PCRE开发标题时:

 * Checking for PCRE development headers...
    Found: no
Run Code Online (Sandbox Code Playgroud)

它告诉我去http://www.pcre.org/下载它们所以我从这里下载了8.33 到我的Downloads文件夹,所以我解压缩它,cd'd到文件夹然后运行:

./configure
make
make install
Run Code Online (Sandbox Code Playgroud)

然后cd'回到我桌面上的rails应用程序目录并重新运行passenger start但它仍然是相同的.尝试了一个新的终端窗口,但没有任何区别.

我之前必须这样做才能让我的开发环境工作,但这次似乎无法解决它.

我也尝试了,brew install pcre但它说Warning: pcre-8.33 already installed.

macos pcre ruby-on-rails passenger ruby-on-rails-2

13
推荐指数
2
解决办法
1万
查看次数

Snort/PCRE正则表达式:奇怪的字符类语法

当我分析Snort的正则表达式集我发现了一个非常奇怪的字符类语法,像[\x80-t]或者[\x01-t\x0B\x0C\x0E-t\x80-t],我想不出(真不知道)什么-t手段.我甚至不知道它是标准PCRE还是某种Snort扩展.

这是一些包含这些字符类的正则表达式:

/\x3d\x00\x12\x00..........(.[\x80-t]|...[\x80-t])/smiR
/^To\x3A[^\r\n]+[\x01-t\x0B\x0C\x0E-t\x80-t]/smi
Run Code Online (Sandbox Code Playgroud)

PS:请注意,\x80-t标准方式甚至不是有效范围,因为字符t\ x74.

regex pcre snort

13
推荐指数
1
解决办法
936
查看次数

strsplit与gregexpr不一致

注释对我的回答这个问题,应该使用得到期望的结果strsplit没有,即使它似乎在一个字符向量正确匹配的第一个和最后逗号.这可以使用gregexpr和证明regmatches.

那么为什么strsplit在这个例子中对每个逗号进行拆分,即使regmatches只返回同一个正则表达式的两个匹配?

#  We would like to split on the first comma and
#  the last comma (positions 4 and 13 in this string)
x <- "123,34,56,78,90"

#  Splits on every comma. Must be wrong.
strsplit( x , '^\\w+\\K,|,(?=\\w+$)' , perl = TRUE )[[1]]
#[1] "123" "34"  "56"  "78"  "90" 


#  Ok. Let's check the positions of matches for this regex …
Run Code Online (Sandbox Code Playgroud)

regex pcre r strsplit

13
推荐指数
1
解决办法
224
查看次数