相关疑难解决方法(0)

为什么正则表达式如此具有争议性?

在探索正则表达式(也称为RegEx-es)时,有许多人似乎将正则表达式视为圣杯.看起来如此复杂的东西 - 只是必须回答任何问题.他们倾向于认为使用正则表达式可以解决所有问题.

另一方面,也有许多人试图不惜一切代价避免使用正则表达式.他们试图找到解决正则表达式的方法并接受额外的编码只是为了它,即使正则表达式是一个更紧凑的解决方案.

为什么正则表达式被认为是如此有争议?是否存在关于它们如何工作的普遍误解?或者可能是一个普遍的信念,正则表达式通常很慢?

regex

209
推荐指数
13
解决办法
4万
查看次数

如何使用preg_match_all()获取子组匹配的所有捕获?

更新/注意事项:

我认为我可能正在寻找的是用PHP 获取组捕获.

引用:使用命名模式子例程的PCRE正则表达式.

(仔细读:)


我有一个包含可变数量的段(简化)的字符串:

$subject = 'AA BB DD '; // could be 'AA BB DD CC EE ' as well
Run Code Online (Sandbox Code Playgroud)

我想现在匹配段并通过匹配数组返回它们:

$pattern = '/^(([a-z]+) )+$/i';
$result = preg_match_all($pattern, $subject, $matches);
Run Code Online (Sandbox Code Playgroud)

这只会返回捕获组2 的最后一个匹配:DD.

有没有办法,我可以检索所有的子模式捕获(的方式AA,BB,DD)与一个正则表达式执行?不preg_match_all适合这个吗?

这个问题是一个概括.

无论是$subject$pattern简化.自然地与这样的通用列表AA,BB..是更容易与其它功能(例如,以提取explode),或与的的变化$pattern.

但我特别询问如何使用preg_...-family函数返回所有子组匹配.

对于现实生活中的情况,假设您有多个(嵌套)级别的子模式匹配变量.

这是用于描述一些背景的伪代码的示例.想象一下:

令牌的常规定义:

   CHARS := [a-z]+
   PUNCT := …
Run Code Online (Sandbox Code Playgroud)

php regex grammar preg-match-all

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

解析perl中的表数据有问题

我有一个类似模式的长htdoc,继续这样:

<td class="MODULE_PRODUCTS_CELL " align="center" valign="top" height="100">
<table width="100" summary="products"><tr>
<td align="center" height="75">
<a href="/collections.php?prod_id=50">
<img src="files/products_categories50_t.txt" border="0" alt="products" /></a><\br>
</td>
</tr>
<tr>
<td align="center">
<a href="/collections.php?prod_id=50"><strong>Buffer</strong><br />
</a>
<td>
</tr></table>
</td>
Run Code Online (Sandbox Code Playgroud)

在上面的html中我想提取:

  1. collections.php?prod_id=50
  2. files/products_categories50_t.txt
  3. Buffer

我已经尝试过这段代码,

#!/usr/local/bin/perl

use strict;
use warnings;
my $filename =  'sr.txt';

open(FILENAME,$filename);
my @str = <FILENAME>;
chomp(@str);
#print "@str";

foreach my  $str(@str){    
     if ($str =~/<td class(.*)<a href(.*?)><\/td>/) {
         print "*****$2\n";
     }    
}
Run Code Online (Sandbox Code Playgroud)

此代码是试用版.然而,它只带来最后一次出现,而不是每次出现.为什么?

html regex perl parsing

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

任何人都能解释一下吗?:正则表达式

TCL:任何人都能解释一下吗?:正则表达式

我之间感到困惑?和?:.

?表示前面的字符可能存在,也可能不存在.

然后我不明白是什么(?:)表示.

任何人都可以请解释一下.

([0-9]+(?:\.[0-9]*)?)
Run Code Online (Sandbox Code Playgroud)

regex tcl

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

标签 统计

regex ×4

grammar ×1

html ×1

parsing ×1

perl ×1

php ×1

preg-match-all ×1

tcl ×1