相关疑难解决方法(0)

正则表达式中方括号和括号之间有什么区别?

这是我在JavaScript中创建的正则表达式:

var reg_num = /^(7|8|9)\d{9}$/
Run Code Online (Sandbox Code Playgroud)

这是我的团队成员建议的另一个.

var reg_num = /^[7|8|9][\d]{9}$/
Run Code Online (Sandbox Code Playgroud)

规则是验证电话号码:

  • 它应该只有十个数字.
  • 第一个数字应该是7,8或9中的任何一个.

regex

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

你能不能只对正则表达式不区分大小写的一部分吗?

我已经看到很多关于使整个正则表达式不区分大小写的例子.我想知道的是只有部分表达式不区分大小写.

例如,假设我有一个这样的字符串:

fooFOOfOoFoOBARBARbarbarbAr
Run Code Online (Sandbox Code Playgroud)

如果我想匹配所有出现的"foo"而不管大小写但我只想匹配大写的"BAR"怎么办?

理想的解决方案是适用于正则表达式的东西,但我也有兴趣听到语言特定的(感谢Espo)

编辑

Espo提供的链接非常有用.关于在表达式中打开和关闭修改器的例子很好.

对于我做作的例子,我可以这样做:

(?i)foo*(?-i)|BAR
Run Code Online (Sandbox Code Playgroud)

这使得匹配仅对匹配的foo部分不区分大小写.

这似乎适用于大多数正则表达式实现,除了Javascript,Python和其他一些(如Espo提到的).

我想知道的大问题(Perl,PHP,.NET)都支持内联模式更改.

regex

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

使用交替或字符类进行单字符匹配?

(注意:标题似乎并不清楚 - 如果有人可以改写,我就是全部!)

鉴于这个正则表达式:(.*_e\.txt),它匹配一些文件名,我需要添加一些其他单字符后缀除了e.我应该选择一个角色类还是应该使用替换?(或者这真的很重要??)

也就是说,以下哪两个似乎"更好",以及为什么:

a)(.*(e|f|x)\.txt),或

b) (.*[efx]\.txt)

regex perl

11
推荐指数
2
解决办法
4538
查看次数

原子团清晰度

考虑这个正则表达式.

a*b
Run Code Online (Sandbox Code Playgroud)

这将失败的情况下 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac

这会使67调试器中的步骤失败.

现在考虑这个正则表达式.

(?>a*)b
Run Code Online (Sandbox Code Playgroud)

这将失败的情况下 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac

这会使133调试器中的步骤失败.

最后这个正则表达式:

a*+b  (a variant of atomic group)
Run Code Online (Sandbox Code Playgroud)

这将失败的情况下 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac

这会使67调试器中的步骤失败.

当我检查基准测试atomic group (?>a*)b执行179%得更快.

现在原子组禁用回溯.所以比赛中的表现很好.

  1. 但为什么步数更多呢?有人可以解释一下吗?

  2. 为什么会有差异.在两个原子团(?>a*)b和之间的步骤a*+b.

他们的工作方式不同吗

regex pcre backtracking

10
推荐指数
2
解决办法
699
查看次数

使用交替比使用正则表达式中的后续替换更快

我有一个很直截了当的问题.在我工作的地方,我看到很多正则表达式都来了.它们在Perl中用于替换和/或删除文本中的一些字符串,例如:

$string=~s/^.+\///;
$string=~s/\.shtml//;
$string=~s/^ph//;
Run Code Online (Sandbox Code Playgroud)

我知道你不能连接第一个和最后一个替换,因为你可能只想ph在第一次替换后在字符串的开头替换.但是,我会将第一个和第二个正则表达式放在一起进行交替:$string=~s/(^.+\/|\.shtml)//;因为我们正在处理数千个文件(+500,000),所以我想知道哪种方法最有效.

regex perl alternation

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

为什么这个JavaScript正则表达式在浏览器中崩溃了?

据我所知[ab],(a|b)在尝试匹配一组字符时应该是有目的的.现在,看看两个正则表达式:

/^(\s|\u00A0)+|(\s|\u00A0)+$/g
/^[\s\u00A0]+|[\s\u00A0]+$/g
Run Code Online (Sandbox Code Playgroud)

它们都应该匹配字符串开头和结尾的空格(有关正则表达式本身的更多信息,请参阅Polyfill 这里的部分).当使用方括号时,一切都运行良好,但是当你切换到括号时,即使是最简单的字符串也会导致浏览器无限期地运行.这种情况发生在最新的Chrome和Firefox上.

这个jsfiddle演示了这个:

a ="a                                                               b";

// Doesn't work
// alert(a.replace(/^(\s|\u00A0)+|(\s|\u00A0)+$/g,''));
// Works
alert(a.replace(/^[\s\u00A0]+|[\s\u00A0]+$/g,''));
Run Code Online (Sandbox Code Playgroud)

这是一个疯狂的怪癖与浏览器的正则表达式引擎的实现或还有其他关于正则表达式的算法导致这个?

javascript regex browser

4
推荐指数
1
解决办法
1248
查看次数

如何在Javascript中删除字符串中的'a'和'c'的所有实例?

如何删除字符串中两个不同字母的所有实例?

例如,我想从'abcabc'中删除'a'和'c',使其变为'bb'.

我知道我做不到'abcabc'.replace(/a/g, '').replace(/c/g, '')但是还有另一个我可以使用的regEx,所以我不需要链接replace功能吗?

谢谢!

javascript regex

-3
推荐指数
1
解决办法
43
查看次数

标签 统计

regex ×7

javascript ×2

perl ×2

alternation ×1

backtracking ×1

browser ×1

pcre ×1