问题标签 [posix-ere]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2311 浏览

mysql - 将 PCRE 转换为 POSIX 正则表达式

我正在研究 MySQL 数据库,并注意到它本身并不支持 PCRE(需要插件)。

我希望将这三个用于一些数据验证(这些实际上是赋予pattern属性的值):

  1. ^[A-z\. ]{3,36}
  2. ^[a-z\d\.]{3,24}$
  3. ^(?=^.{4,}$)(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\s).*$

我该怎么做呢?
我在网上查看,但找不到任何具体的例子或答案。此外,似乎不存在可以自动执行此操作的实用程序。

我知道有时,这样的转换并不准确,可能会产生差异,但我愿意尝试。

0 投票
2 回答
79 浏览

c - 具有扩展语法的 POSIX 正则表达式与它应该匹配的位置不匹配

我正在尝试在 C 中使用 POSIX 正则表达式,但它不起作用。这是我的代码:

我在看这里:http ://www.peope.net/old/regex.html

这永远不会进入 if 语句。

0 投票
4 回答
866 浏览

regex - POSIX BRE/ERE 中的空正则表达式是什么意思?

以下面的 API regex_match 为例,如果我用 regex_match(any_string_here,"") 调用它,你可以看到我在这里传递了一个空的正则表达式,那么它总是返回 0,表示匹配成功。那么,POSIX BRE/ERE 中的空正则表达式是什么意思?

空正则表达式意味着我将 "" 传递给 glibc regcomp 函数。请参见以下示例。

0 投票
2 回答
407 浏览

regex - 如何在 git diff 中拆分标点符号?

我对以下命令有一些运气:

但它似乎并没有正确否定第一个字符类中的方括号。

我试过这个:

为了使方括号文字,但它失败了 message fatal: Invalid regular expression

编辑:

我得到的输出是这样的:

富吧fo]ob[ar

但我追求的是:

fo ] oob [ ar

0 投票
1 回答
192 浏览

regex - Unix 发现不尊重正则表达式

我试图find在我的/var/log目录中做一个简单的查找所有未压缩的系统日志文件。到目前为止,我所拥有的是正则表达式:

syslog(\.[0-9]*)?$

因此,这将找到syslogsyslog.1syslog.999等并跳过 gzip 压缩的日志,例如syslog.1.gz或任何与上述系统日志的模式不匹配的内容。我也在做一个非常基本的 find 命令:

find /var/log -regextype posix-extended -regex "syslog(\\.[0-9]*)?$"

但是,我总是得到一个空的结果!现在,我认为我编写的正则表达式与 POSIX 扩展兼容,但似乎并非如此。以下是我运行的命令的变体,但无济于事:

find /var/log -regextype posix-extended -regex "syslog(\\.[0-9]*)?$"

sudo find /var/log -regextype posix-extended -regex "syslog(\\.[0-9]*)?$"

find /var/log -regextype posix-extended -regex "syslog"

find /var/log -regextype posix-extended -regex "(syslog)"

以下通过列出目录中的所有文件按预期工作,但是,所以我知道我的命令格式是正确的。

find /var/log -regextype posix-extended -regex ".*"

我究竟做错了什么?

0 投票
1 回答
196 浏览

c++ - POSIX 扩展正则表达式 - 不包含 X 而包含 Y (std::regex c++11)

问题说明

我一直在尝试编写一个正则表达式来传递这种格式:

但失败:

他们是关键位。

该行不以注释字符(# 或 //)开头,可以有空格(空格或制表符),必须有一些东西,后跟分隔符(“ - ”),然后是任何东西。

极端情况是:

应该仍然失败。

应该通过。

随机推理

好吧,我失败了。这让我问我们是否可以指定以某种方式包含某些字符但不能包含其他字符。例如

just 表示任何不是 a、b 或 c 的字符。但是我们怎么说不是 abc 而是 123 呢?我们不能只是把

因为那会排除他们,不能做

因为这意味着它必须在某个不是 a、b、c 的字符之后有 123 个字符,总共 4 个字符而不是我们想要的 1 个字符。我不知道这是否可能。所以从某种意义上说,这里有两个问题。

到目前为止,我最好的选择是:

这使得格式匹配正确但不考虑评论。

编辑

我找到了可行的解决方案。它有效,但它很丑陋:

如果有人知道如何使它更好,请告诉我。

0 投票
1 回答
162 浏览

regex - PCRE 到 POSIX 协助

我需要为这些系统日志条目提取配置文件。

May 11 09:35:59 server-0548 ea_appserver: env=ACPT profile=product_api java[31185]: 2017-05-11 09:35:59,210 server-0548 org.hibernate.internal.SessionFactoryImpl ServerService Thread Pool -- 51 HHH000008: JTASessionContext being used with JDBCTransactionFactory; auto-flush will not operate correctly with getCurrentSession()

以下正则表达式适用于 PCRE,但我似乎无法将其转换为 POSIX。

我试过了

但不能停下来product_api

0 投票
1 回答
105 浏览

regex - bash 运算符 =~ 是否尊重语言环境?

bash 手册的条件构造部分中=~描述的bash 运算符是否尊重语言环境?

文档使用 POSIX 扩展正则表达式提到它:

运算符右侧的字符串被视为扩展正则表达式并进行相应匹配(如在 regex3 中)

POSIX 扩展正则表达式联机帮助页man 7 regex描述了它们依赖于语言环境。特别是关于括号表达式,它说:

如果列表中的两个字符由“-”分隔,则这是整理序列中这两个(包括)之间所有字符的简写,例如,ASCII 中的“[0-9]”匹配任何十进制数字。...范围非常依赖于排序序列,可移植程序应避免依赖它们。

所有这些都向我表明,与 bash=~运算符一起使用的正则表达式应该尊重语言环境;但是我的测试似乎并没有证明这一点:

我希望最后一个命令也会回matched显,因为整理序列与(ASCII)语言环境en_US中的序列aAbBcCdD...相反。ABCD...abcd...C

我是否错误地设置了我的语言环境?bash 是否没有为 POSIX 扩展正则表达式正确设置语言环境以使用语言环境?


基于马科斯的回答的更多实验:

en_US语言环境中,[a-M]显然匹配任何小写字符az和任何大写字符AM. 这将建议一个整理顺序abcd...ABCD...而不是aAbBcCdD.... 切换到C使用的语言环境[a-M]将导致2条件构造的退出代码,而不是0or 1。这表明一个无效的正则表达式,这是有道理的,因为C语言环境在整理顺序a之后。M

因此,在 POSIX 扩展正则表达式中肯定会使用语言环境。但是括号表达式不遵循我期望的整理顺序。括号表达式是否可能使用整理顺序以外的其他内容?


edit1:更新为使用实际正确的en_US整理顺序。
编辑2:添加了进一步的发现。

0 投票
1 回答
179 浏览

regex - 哪些编程语言支持基于 posix 的正则表达式?

我知道 Python 中的 re 模块,但它不遵循 posix 标准,并且 PHP 已经删除了 ereg。是否有任何支持该语言的库?我认为最接近的是 Java 中的正则表达式库。有人知道另一个吗?什么是最接近使用正则表达式的方法,例如 linux 中 egrep 中使用的那些?

0 投票
3 回答
377 浏览

regex - POSIX ERE 正则表达式查找重复的子字符串

我有一组包含最少 1 个和最多 3 个值的字符串,格式如下:

我正在尝试编写一个正则表达式,以便我可以找到在同一个字符串上重复的值,所以如果你有123;456;789它会返回null但如果你有123;456;456它会返回456123;456;123返回123

我设法写了这个表达式:

它的工作原理是在null没有重复值时返回,但它不完全返回我需要的值,例如:对于123;456;456它返回的字符串和它返回123;456;456的字符串123;123;123123;123

我需要的是只返回([0-9]+)表达式部分的值,从我读过的内容来看,这通常是使用非捕获组来完成的。但是要么我做错了,要么 Oracle SQL 不支持这一点,就好像我尝试使用?:语法结果不是我期望的那样。

关于如何在 oracle sql 上进行此操作的任何建议?此表达式的目的是在查询中使用它。

编辑:

实际上根据https://docs.oracle.com/cd/B12037_01/appdev.101/b10795/adfns_re.htm

Oracle 数据库实现了符合 POSIX 扩展正则表达式 (ERE) 规范的正则表达式支持。

根据https://www.regular-expressions.info/refcapture.html

POSIX ERE 不支持非捕获组