【问题标题】:what is the difference between PHP regex and javascript regexPHP正则表达式和javascript正则表达式有什么区别
【发布时间】:2016-03-12 02:59:47
【问题描述】:

我正在使用正则表达式我的正则表达式是 /\[([^]\s]+).([^]]+)\]/g 这在 PHP 中非常适用于 [http://sdgdssd.com fghdfhdhhd] 但是当我将此正则表达式用于 javascript 时,它与此输入字符串不匹配

我的输入是[http://sdgdssd.com fghdfhdhhd]

【问题讨论】:

  • 你确定你的说法是正确的?我想/\[([^]\s]+).([^]]+)\]/g 可能适用于 JS 但不适用于 PHP; PHP 具有与 JS 不同的修饰符。 g 不是 PHP 修饰符。
  • 这适用于 PHP,您可以通过在 regex101.com 上执行来检查它
  • regex101 不是 PHP 解释器。那只是一个正则表达式测试器。 eval.in/481587php.net/manual/en/reference.pcre.pattern.modifiers.php 正则表达式是有效的,但它在带有该修饰符的 PHP 中不起作用。 PHP 函数已经是全局的,或者有一个全局函数(preg_match_all 与 preg_match)..

标签: javascript php regex


【解决方案1】:

在 JavaScript 正则表达式中,您必须始终转义字符类中的 ]

\[([^\]\s]+).([^\]]+)\]

regex demo

JS 将 [^] 解析为 *任何字符,包括正则表达式中的换行符,并将最终字符类 ] 符号解析为文字 ]

在这方面,JS 正则表达式引擎偏离了 POSIX standard,其中 智能放置 用于匹配 [] 符号与括号表达式,如 @ 987654333@.

如果]^ 之后的第一个字符,则将] 字符视为文字字符:[^]abc]

JS and Ruby 中,它不是这样工作的:

您可以通过将未转义的右括号放在左括号之后,或在否定插入符号之后。 []x] 匹配右括号或 x[^]x] 匹配任何不是右括号或x 的字符。这在 JavaScript 中不起作用,它将 [] 视为始终无法匹配的空字符类,并将 [^] 视为匹配任何单个字符的否定空字符类。 Ruby 将空字符类视为错误。所以 JavaScript 和 Ruby 都需要用反斜杠转义右括号,以将它们作为文字包含在字符类中

相关:

【讨论】:

  • 这很奇怪 ] 不需要在 PCRE 中转义。我总是出于本能而逃避,因为我认为如果不这样做,它会窒息。
  • @chris85:我刚刚编辑了答案,因为我仔细检查并发现 [ 不需要在 JS 的字符类中转义。
  • 添加了一些与此问题相关的更多解释。
【解决方案2】:

我想补充一点关于在 JavaScript .replace Regex 中翻译 PHP preg_replace Regex 的小事实:

<?php preg_replace("/([^0-9\,\.\-])/i";"";"-1 220 025.47 $"); ?>
Result : "-1220025.47"

使用 PHP,您必须在 Regex 周围使用引号 "...",用逗号分隔 Regex 和替换,括号用作重复研究(女巫根本不是同一件事。

<script>"-1 220 025.47 $".replace(/[^0-9\,\.\-]/ig,"") </script>
Result : "-1220025.47"

使用 JavaScript,Regex 周围没有引号,用逗号将 Regex 与替换分开,您必须使用 /g 选项才能表示除 /i 选项之外的多项研究(这就是 /ig 的原因) .

我希望这对某人有用! 请注意,"\," 可能会在 "1,000.00 $"(英语?)类型的数字的情况下被取消:

<script>"-1,220,025.47 $".replace(/[^0-9\.\-]/ig,"")</script>
<?php preg_replace("/([^0-9\.\-])/i";"";"-1,220,025.47 $"); ?>
Result : "-1220025.47"

【讨论】:

    猜你喜欢
    • 2012-02-22
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 2016-11-18
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    相关资源
    最近更新 更多