标签: preg-match-all

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
查看次数

如何使用RegEx排除[]内的符号

我正在使用PHP preg_match_all,这是我到目前为止所能获得的....

[A-Za-z+\W]+\s[\d]
Run Code Online (Sandbox Code Playgroud)

唯一的问题是我需要\ W不是一个".

所以我试过了:

[A-Za-z+[^\dA-Za-z"]\s?]+\s[\d]


[A-Za-z+]\s?+[^A-Za-z\d"]?\s[\d]
Run Code Online (Sandbox Code Playgroud)

除其他外,它只是失败,我真的无法弄清楚为什么.

编辑:

这是整个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)

我把它分成两行,第二行从我发布的内容开始.

试图匹配的模式:

    India – Adulterated Tea Powder Seized 18 April 2011
    India – Importer of Haldiram’s Petha Sweet Cubes Issuing Voluntary Recall 26 April 2011
    India – Undeclared Gluten Found in Sweets by Canadian Authorities 27 April 2011
    India – Adulteration Found in Edible Oils 28 April 2011
    India – Viral Disease Affects Chili Crop in Goa 28 April 2011
NOT ---->   Chili – India: …
Run Code Online (Sandbox Code Playgroud)

php regex preg-match-all

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

通过php和regex从文本字符串中查找网址?

我知道问题标题看起来非常重复.但是我在这里找不到一些解决方案.

我需要找到url表单文本字符串:

$pattern = '`.*?((http|https)://[\w#$&+,\/:;=?@.-]+)[^\w#$&+,\/:;=?@.-]*?`i';

    if (preg_match_all($pattern,$url_string,$matches)) {
        print_r($matches[1]);
    }
Run Code Online (Sandbox Code Playgroud)

使用这种模式我能找到的网址http://https://这是好.但我有用户输入,人们www.domain.com甚至可以添加网址domain.com

所以,我需要首先验证字符串,然后我可以用它们之前的www.domain.com domain.com常规协议替换http://它.或者我需要提出更好的模式?

我对正则表达不太好,不知道该怎么做.

我的想法是首先找到的网址http://,并https://在把它们放在一个数组,然后替换这些URL以空格("")的文本字符串,然后使用其他模式来进行的.但我不确定使用什么模式.

我正在使用这个,$url_string = preg_replace($pattern, ' ', $url_string );但是删除两个有效网址之间的任何www.domain.comdomain.com网址http://https://

如果你能提供帮助就会很棒.

为了使事情更清楚:

我需要一个模式或其他方法,我可以在文本中找到所有网址.url的例子是:

  1. domain.com
  2. www.domain.com
  3. http://www.domain.com
  4. http://domain.com
  5. https://www.domain.com
  6. https://domain.com

谢谢!5.

php regex preg-replace preg-match-all

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

preg_match_all()如何处理字符串?

我还在学习很多关于PHP的知识,字符串更改是我感兴趣的东西.我之前使用过preg_match来验证电子邮件地址或只搜索查询.

我刚从这篇文章中发表我的正则表达式有什么问题?并且好奇为什么preg_match_all函数产生2个字符串,1 w /一些字符被剥离,然后另一个带有所需的输出.

根据我对该函数的理解,它使用RegEx来逐字符串地逐字符号来评估如何处理它.这个RegEx的结构是否可以绕过第一个数组条目并产生所需的结果?

所以你不必去另一个线程

$str = 'text^name1^Jony~text^secondname1^Smith~text^email1^example-
        free@wpdevelop.com~';

preg_match_all('/\^([^^]*?)\~/', $str, $newStr);

for($i=0;$i<count($newStr[0]);$i++)
{
    echo $newStr[0][$i].'<br>';
}

echo '<br><br><br>';

for($i=0;$i<count($newStr[1]);$i++)
{
    echo $newStr[1][$i].'<br>';
} 
Run Code Online (Sandbox Code Playgroud)

这将输出

^乔尼斯〜
^史密斯〜
^example-free@wpdevelop.com~


强尼
·史密斯
example-free@wpdevelop.com

我很好奇,如果2个数组条目的原因是由于字符串的原始sytax或者它是函数的正常处理响应.对不起,如果这不应该在这里,但我真的很好奇这是如何工作的.

谢谢,布罗迪

php regex preg-match-all

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

虽然通过"preg_match_all"函数获取html内容特殊字符不能正常显示,如何解决这个问题?

我使用下面的代码获取html内容,

preg_match_all('/<div class="content">(.*?)<\/div>/s', $str, $matches);
echo $matches[1][0];
Run Code Online (Sandbox Code Playgroud)

内容已正确获取但某些特殊字符文本无法正确显示

“response to what?” 显示为"响应什么?"

but it doesn’t显示为但不重要.和一些空白的空间显示为

如何解决这个问题..?

php preg-match-all

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

PHP正则表达式中"〜"字符表示什么?

"〜"字符在下面的含义是什么?:

preg_match_all("~<img [^>]+>~", $inputw, $output);
Run Code Online (Sandbox Code Playgroud)

我猜他们是开始和结束标记,如^和$.

php regex preg-match-all

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

多个通配符preg_match_all php

我想从html之间提取一个数字<td>...</td>.我试过以下代码:

$views = "/<td id=\"adv-result-views-(?:.*)\" class=\"spec\">(.*?)<\/td>/";
Run Code Online (Sandbox Code Playgroud)

after -views-是一个随机数.忽略搜索中随机数的正确代码是什么?

html php regex preg-match-all

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

德国电话号码格式的正则表达式

我尝试从德语格式的字符串中获取电话号码。但是我没有完全发挥作用。输入文本是一个完整的HTML页面,其中包含很多内容,而不仅仅是数字。

可能的格式:

(06442) 3933023     
(02852) 5996-0       
(042) 1818 87 9919   
06442 / 3893023  
06442 / 38 93 02 3     
06442/3839023
042/ 88 17 890 0     
+49 221 549144 – 79  
+49 221 - 542194 79  
+49 (221) - 542944 79
0 52 22 - 9 50 93 10 
+49(0)121-79536 - 77 
+49(0)2221-39938-113 
+49 (0) 1739 906-44  
+49 (173) 1799 806-44
0173173990644
0214154914479
02141 54 91 44 79
01517953677
+491517953677
015777953677
02162 - 54 91 44 79
(02162) 54 91 44 …
Run Code Online (Sandbox Code Playgroud)

php java regex preg-match-all preg-match

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

从特定字符后的字符串中获取数字并转换该数字

我需要一个正则表达式php的帮助.如果在字符串中找到某个字符后的数字.获取该数字并在应用数学后替换它.像货币转换.

我应用了这个正则表达式https://regex101.com/r/KhoaKU/1

([^ \?] )AUD(\ d)

正则表达式不正确我希望所有匹配的数字在这里只有它匹配40但是还有20.00,9.9等..我想要得到所有.并转换它们.

function simpleConvert($from,$to,$amount)
{
    $content = file_get_contents('https://www.google.com/finance/converter?a='.$amount.'&from='.$from.'&to='.$to);

     $doc = new DOMDocument;
     @$doc->loadHTML($content);
     $xpath = new DOMXpath($doc);

     $result = $xpath->query('//*[@id="currency_converter_result"]/span')->item(0)->nodeValue;
     return $result;
}

$pattern_new = '/([^\?]*)AUD (\d*)/';
if ( preg_match ($pattern_new, $content) )
{
    $has_matches = preg_match($pattern_new, $content);
    print_r($has_matches);
   echo simpleConvert("AUD","USD",$has_matches);
}
Run Code Online (Sandbox Code Playgroud)

php regex preg-replace preg-match-all preg-match

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

PHP:意外的PREG_BACKTRACK_LIMIT_ERROR

function recursiveSplit($string, $layer) {
    $err = preg_match_all("/\{(([^{}]*|(?R))*)\}/",$string,$matches);
    echo "Elementi trovati: $err<br>";
    if($err == FALSE) echo "preg_match_all ERROR<br>";

    // iterate thru matches and continue recursive split
    if (count($matches) > 1) {
        for ($i = 0; $i < count($matches[1]); $i++) {
            if (is_string($matches[1][$i])) {
                if (strlen($matches[1][$i]) > 0) {
                    echo "<pre>Layer ".$layer.":   ".$matches[1][$i]."</pre><br />";
                    recursiveSplit($matches[1][$i], $layer + 1);
                }
            }
        }
    }
}

$buffer = "{aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa{aaaaaaaaaaaaaaaaaa{aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}";
recursiveSplit($buffer, 0);
Run Code Online (Sandbox Code Playgroud)

产量

Elementi trovati: 
preg_match_all ERROR
Backtrack limit was exhausted!
Run Code Online (Sandbox Code Playgroud)

此代码给出了PREG_BACKTRACK_LIMIT_ERROR错误...但回溯限制设置为100.000.000.

这是我第一次使用正则表达式,我真的不知道如何解决它.

非常感谢,Marco

php regex preg-match-all

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

标签 统计

php ×10

preg-match-all ×10

regex ×8

preg-match ×2

preg-replace ×2

html ×1

java ×1