小编CSᵠ*_*CSᵠ的帖子

对于IEEE754 NaN值,所有比较返回false的理由是什么?

为什么NaN值的比较与所有其他值的行为不同?也就是说,与运算符==,<=,> =,<,>的所有比较(其中一个或两个值为NaN)返回false,这与所有其他值的行为相反.

我想这可以通过某种方式简化数值计算,但我找不到明确说明的理由,甚至在Kahan 的IEEE 754状态讲义中也没有详细讨论其他设计决策.

这种异常行为在进行简单数据处理时会造成麻烦.例如,当在C程序中对某些实值字段的记录列表进行排序时,我需要编写额外的代码来处理NaN作为最大元素,否则排序算法可能会变得混乱.

编辑: 迄今为止的答案都认为比较NaNs毫无意义.

我同意,但这并不意味着正确的答案是错误的,而是一个非布尔值(NaB),幸运的是它不存在.

因此,在我看来,选择返回真或假的比较是任意的,对于一般数据处理,如果它遵循通常的定律(==的反射性,<= =,>的三分法),那将是有利的,以免数据结构依赖这些法律变得困惑.

因此,我要求打破这些法律的一些具体优势,而不仅仅是哲学推理.

编辑2: 我想我现在理解为什么使NaN最大化是一个坏主意,它会搞砸上限的计算.

可能需要NaN!= NaN以避免检测环路中的收敛,例如

while (x != oldX) {
    oldX = x;
    x = better_approximation(x);
}
Run Code Online (Sandbox Code Playgroud)

然而,最好通过比较绝对差异与小限制来编写.所以恕我直言,这是打破NaN反身性的一个相对弱的论据.

floating-point comparison nan ieee-754 iec10967

240
推荐指数
5
解决办法
4万
查看次数

折叠并捕获单个正则表达式中的重复模式

我不断遇到需要从字符串中捕获大量令牌的情况,经过无数次的尝试后,我找不到简化过程的方法.

所以我们说文本是:

启动:测试 - 测试 - LOREM-存有-SIR-doloret - 等 - 等 - 的东西:结束

这个例子里面有8个项目,但是说它可能有3到10个项目.

我理想上喜欢这样的东西:
start:(?:(\w+)-?){3,10}:end漂亮而干净但是它只能抓住最后一场比赛.看这里

我通常在简单的情况下使用这样的东西:

start:(\w+)-(\w+)-(\w+)-?(\w+)?-?(\w+)?-?(\w+)?-?(\w+)?-?(\w+)?-?(\w+)?-?(\w+)?:end
Run Code Online (Sandbox Code Playgroud)

由于最大10限制,3组强制要求和另外7组可选,但这看起来并不"好",如果最大限制为100且匹配更复杂,编写和跟踪将是一件痛苦的事.演示

到目前为止我能做的最好:

start:(\w+)-((?1))-((?1))-?((?1))?-?((?1))?-?((?1))?-?((?1))?-?((?1))?:end
Run Code Online (Sandbox Code Playgroud)

特别是如果比赛很复杂但仍然很长.演示

有人设法让它作为一个没有编程的1正则表达式解决方案工作

我最感兴趣的是如何在PCRE中完成,但其他口味也可以.

更新:

目的是match 0通过RegEx单独验证匹配并捕获单个令牌,而不受任何OS /软件/编程语言限制

更新2(赏金):

在@nhahtdh的帮助下,我使用以下方法访问下面的RegExp \G:

(?:start:(?=(?:[\w]+(?:-|(?=:end))){3,10}:end)|(?!^)\G-)([\w]+)
Run Code Online (Sandbox Code Playgroud)

演示甚至更短,但无需重复代码即可进行描述

我也对ECMA的味道感兴趣,因为它不支持\G想知道是否有另一种方式,特别是不使用/g修饰符.

regex language-agnostic

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

如何将JavaScript变量用作PHP变量?

我试图将PHP变量作为PHP变量包含在PHP代码中,但我遇到了这样的问题.单击按钮时,将调用以下函数:

<script type="text/javascript">
    function addTraining(leve, name, date)
    {
        var level_var = document.getElementById(leve);
        var training_name_var = document.getElementById(name);
        var training_date_var = document.getElementById(date);

        <?php
            $result = "INSERT INTO training(level, school_name, training_date) VALUES('level_var', 'training_name_var', 'training_date_var')" or die("Query not possible.");
        ?>

</script>
Run Code Online (Sandbox Code Playgroud)

可能吗?

javascript php

19
推荐指数
3
解决办法
18万
查看次数

只保留字符串中的数值?

我有一些像这样的字符串

string phoneNumber = "(914) 395-1430";
Run Code Online (Sandbox Code Playgroud)

我想剥去parethenses和破折号,换句话说就是保留数值.

所以输出看起来像这样

9143951430
Run Code Online (Sandbox Code Playgroud)

如何获得所需的输出?

c# regex string numeric

19
推荐指数
5
解决办法
2万
查看次数

如何使用Notepad ++删除每行的最后13个(或n个)字符

我有一个文件,每行Mar 15, 2013以及其他日期结束,所以我需要删除每行的结尾说最后13个字符

每一行都有不同的长度,并且具有不同的字符,因此无法使用任何字符作为分隔符.

regex notepad++

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

在MongoDB Collection中查找与RegEx数组匹配

假设我有这些字段的集合:

{
    "category" : "ONE",
    "data": [
        {
            "regex": "/^[0-9]{2}$/",
            "type" : "TYPE1"
        },
        {
            "regex": "/^[a-z]{3}$/",
            "type" : "TYPE2"
        }
        // etc
    ]
}
Run Code Online (Sandbox Code Playgroud)

所以我的输入是"abc"所以我想获得相应的类型(或最佳匹配,尽管最初我假设RegExes是独占的).有没有可能通过良好的性能实现这一目标?(这将排除迭代RegEx数组的每个项目)

请注意,如果可能,可以重新安排架构,因为该项目仍处于设计阶段.所以替代方案将受到欢迎.

每个类别可以有大约100 - 150个RegExes.我打算有大约300个类别.但我知道这些类型是相互排斥的.

一个类别的真实世界示例:

type1=^34[0-9]{4}$, 
type2=^54[0-9]{4}$, 
type3=^39[0-9]{4}$, 
type4=^1[5-9]{2}$, 
type5=^2[4-9]{2,3}$
Run Code Online (Sandbox Code Playgroud)

regex performance mongodb aggregation-framework

9
推荐指数
1
解决办法
844
查看次数

二进制数的正则表达式可被5整除

我想写一个正则表达式的二进制数可被5整除.
我已经完成了二进制数的正则表达式,可以被2和3整除,但我找不到一个5.

有什么建议?

regex binary division

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

生成唯一的6位数代码

我正在从以下字符生成一个6位数的代码.这些将用于在贴纸上盖章.
它们将分批生成10k或更少(打印前),我不认为总计将超过1-2百万(可能更少).
生成批量代码后,我将检查现有代码的MySQL数据库,以确保没有重复.

// exclude problem chars: B8G6I1l0OQDS5Z2

$characters = 'ACEFHJKMNPRTUVWXY4937';

$string = '';

for ($i = 0; $i < 6; $i++) {
    $string .= $characters[rand(0, strlen($characters) - 1)];
}   

return $string;
Run Code Online (Sandbox Code Playgroud)
  1. 这是生成代码的可靠方法吗?
  2. 有多少可能的排列?(来自21个字符的池中的6位数字代码).对不起数学不是我的强项

php random algorithm permutation

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

php垂直正则表达式搜索

我有一个字符串描述像这样的nxm元素矩阵:

§inputmap = "
~~~~~~~~~~~~~~~~~~~~B~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~BBB........BBB~~~~~~~~~~~~~
~~~~~~~~~~BB...............FBB~~~~~~~~~~
~~~~~~~~BB....................BB~~~~~~~~
~~~~~~BB.....F..................BB~~~~~~
~~~~~BB.....................F.....B~~~~~
~~~~B..............................B~~~~
~~~B........F.......................B~~~
~~BB.........F......................BB~~
~~B................F.................BB~
~BF....F....F........................FB~
~B.....................................B
B.....................................FB
B........F......F......................B
B...........................F..........B
B......................................B
B......................................B
B.......F.......................F......B
B......FFF.............................B
B.......F.............................FB
~B..................F.................FB
~BF...........................F.......B~
~~B...F...........F..........FFFFF.F.BB~
~~BB..................F..F....F.....BB~~
~~~B.......................FF.FF....B~~~
~~~~B..............................B~~~~
~~~~~BB...........................B~~~~~
~~~~~~BB........................BB~~~~~~
~~~~~~~~BB..........F..........B~~~~~~~~
~~~~~~~~~~BB................BB~~~~~~~~~~
~~~~~~~~~~~~~BBB.......F.BBB~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~BBBBBB~~~~~~~~~~~~~~~~~
";
$inputmap = trim($inputmap);
Run Code Online (Sandbox Code Playgroud)

我需要构建一个正则表达式(或其他东西)来搜索字符串:

$search = "
*F*
FFF
*F*
";
$search = trim($search);
Run Code Online (Sandbox Code Playgroud)

在整个网格上.另一方面,我需要找到一个5个不同字母"F"的图案(垂直3个,水平3个),回到地图上找到的图案的行/列位置.

考虑到输入矩阵可以是不同的(5x5或10x10或20x25或......),有没有办法解决我的PHP和正则表达式的问题?

php regex pattern-matching

6
推荐指数
1
解决办法
202
查看次数

使用regex从url中删除查询字符串参数

我是regex的新手,需要从我们的网址中删除一些内容

 http://mysite.blah/problem/smtp/smtp-open-relay?page=prob_detail&showlogin=1&action=smtp:134.184.90.18
Run Code Online (Sandbox Code Playgroud)

我需要删除"?"中的所有内容 然后,离开我:

http://mysite.blah/problem/smtp/smtp-open-relay
Run Code Online (Sandbox Code Playgroud)

这是我们用于获取路径数据的当前正则表达式.例如,我可以抓住"smtp"和"smtp-open-relay"(我们需要).但是,有时我们的url会根据用户的来源而改变,从而附加查询字符串参数,这会导致我们当前的正则表达式爆炸.

// Retrieve the route data from the route
var routeData = /([0-9a-zA-Z_.-]+)\/([0-9a-zA-Z_.-]+)$/g.exec(route);
Run Code Online (Sandbox Code Playgroud)

我需要它来忽略"?"中的内容.上.

javascript regex jquery

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