标签: preg-match-all

PHP:如何获取preg_match_all的字符串索引?

假设我有两个正则表达式,

/eat (apple|pear)/
/I like/
Run Code Online (Sandbox Code Playgroud)

和文字

"I like to eat apples on a rainy day, but on sunny days, I like to eat pears."
Run Code Online (Sandbox Code Playgroud)

我想要的是使用preg_match获取以下索引:

match: 0,5 (I like)
match: 10,19 (eat apples)
match: 57,62 (I like)
match: 67,75 (eat pears)
Run Code Online (Sandbox Code Playgroud)

有没有办法使用preg_match_all获取这些索引,而不是每次循环文本?

编辑:解决方案 PREG_OFFSET_CAPTURE!

php regex preg-match-all

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

涉及日语的PHP正则表达式

我的目标是通过Microsoft Word文档(.docx)过滤所有日语汉字和假名.我正在使用的当前代码如下:

preg_match_all('~[\x{4e00}-\x{9faf}]([\x{3040}-\x{309f}]) \= ([a-z]) \=+~u', $data, $matches);
Run Code Online (Sandbox Code Playgroud)

根据一些研究,我发现日文文本的unicode值如下:http://www.rikai.com/library/kanjitables/kanji_codes.unicode.shtml

我正在使用的数据示例如下所示:

时(とき)= toki =时间; 小时; 场合; 时刻を= wo =粒子标记句子的直接对象(时=时间)超えて(こえて)= koete = cross

我的最终目标是能够以类似的模式运行preg_match_all获取数据,看起来像"超えて(こえて)= koete"之前的信息(以及里面的信息()和之后的罗马化= =

我正在寻找的结果将是一个返回的数组,看起来像:

array(
    0 => array('?', '??', 'toki'),
    1 => array('???', '???', 'koete')
);
Run Code Online (Sandbox Code Playgroud)

每个数组的第一个结果包括"汉字,平假名,可能还有片假名",而第二个结果只有平假名,第三个结果只是普通的字母字符.我对正则表达式并不是很好,并添加了Japaense unicode,我很无能为力,任何帮助都会非常感激!谢谢!

php regex unicode preg-match-all

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

正则表达式模式使用w.*不匹配以外来字符开头的文本,例如Ä

我有以下我成功使用的正则表达式:

preg_match_all('/(\d+)\n(\w.*)\n(\d{3}\.\d{3}\.\d{2})\n(\d.*)\n(\d.*)/', $text, $matches)
Run Code Online (Sandbox Code Playgroud)

但是我刚刚发现,如果(\w.*)部件匹配的文本以外来字符开头Ä,那么它与任何东西都不匹配.

任何人都可以帮助我正确的模式应该是什么,而不是(\w.*)匹配以任何字符开头的字符串?

非常感谢

php regex preg-match-all preg-match

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

preg_match_all有回调吗?

我有兴趣实时替换数字匹配并将它们操作为十六进制.

我很想知道是否可以不使用foreach循环.

所以...

两者之间的一切 :

= {数值} ;

将被归为:

= {十六进制数值} ;

preg_match_all('/\=[0-9]\;/',$src,$matches);
Run Code Online (Sandbox Code Playgroud)

是否有任何回调preg_match_all所以不是预先形成一个循环,我可以在preg_match_all捕获每个匹配(实时)时立即操作它们.

这不是正确的语法,但你可以得到这个想法:

preg_match_all_callback('/\=[0-9]\;/',$src,$matches,{convertAll[0-9]ToHexadecimal});
Run Code Online (Sandbox Code Playgroud)

php string numeric callback preg-match-all

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

Php正则表达式匹配div

这是我的代码

<?php

/**
 * @author Joomlacoders
 * @copyright 2010
 */
    $url="http://urlchecker.net/html/demo.html";

    $innerHtml=file_get_contents($url);

    //echo $innerHtml;
    preg_match_all("{\<div id='news-id-.*d'\>(.*)\</div\>}",$innerHtml,$matches);

          //<div id='news-id-160346'>            

    var_dump($matches);

?>
Run Code Online (Sandbox Code Playgroud)

我想找到div id ='news-id-160346'中的所有内容.请帮我

php preg-match-all

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

Preg_match_all在数组中返回数组?

我试图从这个数组中获取信息,但由于某种原因,它将所有内容嵌入$matches[0].

<?

$file = shell_exec('pdf2txt.py docs/April.pdf');

preg_match_all('/.../',$file,&$matches);
print_r($matches)

?>
Run Code Online (Sandbox Code Playgroud)

这是否按预期工作?有没有办法把它放在深度为1的数组中?

编辑:

这是RegEx:

([A-Z][a-z]+\s){1,5}\s?[^a-zA-Z\d\s:,.\'\"]\s?[A-Za-z+\W]+\s[\d]{1,2}\s[A-Z][a-z]+\s[\d]{4}
Run Code Online (Sandbox Code Playgroud)

php regex preg-match-all

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

preg_match_all - 在字符串中查找完整 url 的正则表达式

我花了 4 个多小时试图找到我的 php 代码的正则表达式模式,但没有运气。

我有一个带有 html 代码的字符串。它有很多网址格式,例如:

example.com
http://example.com
http://www.example.com
http://example.com/some.php
http://example.com/some.php?var1=1
http://example.com/some.php?var1=1&var2=2
etc.
Run Code Online (Sandbox Code Playgroud)

我有以下 php 代码部分工作:

preg_match_all('/\b(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)[-A-Z0-9+&@#\/%=~_|$?!:,.]*[A-Z0-9+&@#\/%=~_|$]/i', $content, $result, PREG_PATTERN_ORDER);
Run Code Online (Sandbox Code Playgroud)

我唯一需要的是还使用“&”捕获具有多个查询字符串的 url 我得到它们,但不是完整的,我只收到如下内容:

http://example.com/asdad.php?var1=1&
Run Code Online (Sandbox Code Playgroud)

左边丢失了。

有人可以帮我将丢失的部分添加到模式中吗?

非常感谢。

php preg-match-all

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

为什么preg_match_all返回两个匹配?

我试图确定一个字符串是否在双引号之间有任何单词preg_match_all,但它是重复结果,第一个结果有两组双引号,其中被搜索的字符串只有一组.

这是我的代码:

$str = 'Test start. "Test match this". Test end.';
$groups = array();
preg_match_all('/"([^"]+)"/', $str, $groups);
var_dump($groups);
Run Code Online (Sandbox Code Playgroud)

var转储产生:

array(2) {
    [0]=>
    array(1) {
        [0]=>
        string(17) ""Test match this""
    }
    [1]=>
    array(1) {
        [0]=>
        string(15) "Test match this"
    }
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的那样,第一个数组是错的,为什么要preg_match_all返回呢?

php regex duplicate-data preg-match-all

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

使用正则表达式从字符串中提取数字和符号

我有一个包含文本、数字和符号的字符串。我试图从字符串中提取数字和符号,但成功有限。我没有得到整个数字和符号,而是只得到其中的一部分。我将在下面解释我的正则表达式,使其更清晰,更容易理解。

\d : any number
[+,-,*,/,0-9]+ : 1 or more of any +,-,*,/, or number
\d : any number
Run Code Online (Sandbox Code Playgroud)

代码:

$string = "text 1+1-1*1/1= text";

$regex = "~\d[+,-,*,/,0-9]+\d~siU";
preg_match_all($regex, $string, $matches); 

echo $matches[0][0];
Run Code Online (Sandbox Code Playgroud)

预期成绩

1+1-1*1/1
Run Code Online (Sandbox Code Playgroud)

实际结果

1+1
Run Code Online (Sandbox Code Playgroud)

php regex preg-match-all

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

使用preg_match_all将所有数字与正则表达式匹配

我有一个文本,并尝试添加链接到其中的每个数字3.
我使用带有模式的preg_match_all:(^|[^\d])(\d{3})($|[^\d])
此处使用分组仅将链接添加到数字,而不是添加到其邻居.测试用例包括:

  1. a 123 234 b - 必须匹配123和234
  2. a 123_234 b - 必须匹配123和234
  3. aa123 234 b - 必须匹配123和234
  4. a0123 234 b- 必须匹配234
  5. 123a234 b - 必须匹配123和234
  6. a 123 234 - 必须匹配123和234

测试2和3工作正常,其他测试因2个数字之间的空间而失败.
如何将两个数字匹配,它们之间只有1个空格?

php regex preg-match-all

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