我正在使用正则表达式.从来没有完全理解它真正的问题是:是否有人有一个很好的网站,解释表达之间的差异,而不只是发布像
$regexp = "/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/";
Run Code Online (Sandbox Code Playgroud)
然后讨论整个线路的作用.而不是每个表达式将做什么.我已经尝试使用Google搜索许多不同版本的preg_replace和regex教程,但他们似乎都认为我们已经知道像\ b [^>]*会做什么.
二级.我试图这样做的原因:我想转
<span style="color: #000000">*ANY NUMBER*</span>
Run Code Online (Sandbox Code Playgroud)
成
<span style="color: #0000ff">*ANY NUMBER*</span>
Run Code Online (Sandbox Code Playgroud)
一些变种,我已经尝试过一些只是没有工作一些使脚本废话.
$data = preg_replace("/<span style=\"color: #000000\">([0-9])</span>/", "<span style=\"color: #FFCC00\">$1</span>", $data);//just tried to match atleast 0-9
$data = preg_replace("/<span style=\"color: #000000\"\b[^>]*>(.*?)</span>/", "<span style=\"color: #FFCC00\">$1</span>", $data);
$data = preg_replace("/<span style=\"color: #000000\"\b[^>]*>([0-9])</span>/", "<span style=\"color: #FFCC00\">$1</span>", $data);
Run Code Online (Sandbox Code Playgroud)
这个具体问题的答案对我来说并不像一个网站那么重要,所以检查就是这样.尝试了很多不同的网站,我很确定它不高于我的理解我只是找不到一个好的所有坏教程/示例农场.W3和phpdotnet的正常回退不具备我这次需要的东西.
EDIT1对于那些最终在这里寻找类似答案的人:
$data = preg_replace("/<span style=\"color: #000000\">([0-9]{1,})<\/span>/", "<span style=\"color: #FFCC00\">$1</span>", $data);
Run Code Online (Sandbox Code Playgroud)
做了它需要的东西.可悲的是,这是我尝试的第一件事之一,但因为我没有放</ span>而不是它不起作用,我不知道"[0-9] {1,}"是否是最合适的匹配方式number(告诉它匹配任何整数0-9与[0-9]至少一次,尽可能多次与{1,},它仍然适合目的)
ROY Finley发布时间:http: //www.macronimous.com/resources/writing_regular_expression_with_php.asp 它是一个很好的网站,有一个表达式定义列表和一个很好的示例后续工作.
另外:regular-expressions.info/tutorial.html发布了几次.它是一个更慢,更深入的步行,但如果你被卡住,我就是它的好.
在我有机会玩它们之后,会弹出regex101和解析器.
EDIT2 DWright在"掌握正则表达式"下面发布了一个书籍链接.如果你看一下正则表达式并且无法对字符的卷积做出正面或反面,那么它绝对值得一试.花了大约一个半小时来阅读大约一半,但这与谷歌花费的时间相比没有时间,并且用来避免它的乱七八糟的工作.
下面链接的html解析也适用于这个特定问题.
这段代码工作了几天,直到它在最糟糕的时间停止工作.它只是从NOAA网站提取天气警报信息并将其显示在我的页面上.有人可以告诉我为什么会突然失败?
$file = file_get_contents("http://forecast.weather.gov/showsigwx.php?warnzone=ARZ018&warncounty=ARC055");
preg_match_all('#<div id="content">([^`]*?)<\/div>#', $file, $matches);
$content = $matches[1];
echo "content = ".$content."</br>" ;
echo "matches = ".$matches."</br>" ;
print_r ($matches); echo "</br>";
echo "file </br>".$file."</br></br>" ;
Run Code Online (Sandbox Code Playgroud)
现在我得到的只是一个空数组.
这是输出..
content = Array
matches = Array
Array ( [0] => Array ( ) [1] => Array ( ) )
file = the full page as requested by file_get_contents
Run Code Online (Sandbox Code Playgroud) 我正在尝试从XML文件中提取数据(http://freegeoip.net/xml/google.com).您可以看到该文件的内容如下所示:
<Response>
<Ip>74.125.235.3</Ip>
<CountryCode>US</CountryCode>
<CountryName>United States</CountryName>
<RegionCode>CA</RegionCode>
<RegionName>California</RegionName>
<City>Mountain View</City>
<ZipCode>94043</ZipCode>
<Latitude>37.4192</Latitude>
<Longitude>-122.0574</Longitude>
<MetroCode>807</MetroCode>
<AreaCode>650</AreaCode>
</Response>
Run Code Online (Sandbox Code Playgroud)
我想获取存储在<latitude>和<longitude>标签中的信息,并将它们存储在单独的变量中.问题是,我不知道如何做到这一点,并想知道是否有人可以告诉我如何用PHP解析XML文件?
我已经断断续续地这样做了几天,但我对 RexEx 的掌握程度并不好。是的,我知道 RegEx 不是用于解析 HTML 的。我正在对 CKEditor 输入进行服务器端“清理”,它已经做到了这一点,但仅限于客户端。
剥离所有白名单标签后...
第一:删除所有用或引号$html = preg_replace(' on\w+=(["\'])[^\1]*?\1', '', $html); 正确引用的事件属性'"
第二:$html = preg_replace(' on\w+=\S+', '', $html);*删除那些没有引号但仍然可以触发的,例如。onclick=blowUpTheBase()
我想做的是确保 onEvent 位于<&之间>,但只有当 onEvent 属性是标签后的第一个属性时,我才能让它工作。我尝试的一切最终都会捕获大部分代码。我就是懒得够。
前任。$html = preg_replace('<([\s\S]?)( on\w+=\S+) ([\s\S]*?)>', '<$1 $3>', $html);
编辑:我将选择 @colburton 的答案,因为 RegEx 是我所要求的。我也会将它用于我的特殊情况,因为它会带来技巧。(无论如何,这是一个内部应用程序)
但
我要感谢@Casimir et Hippolyte 的回答,因为它提供了一个很好的例子并解释了如何以“正确的方式”做到这一点。我将很快使用 DOMDocument 编写一个函数,它将成为我处理 RTE/WYSIWYG/HTML 输入的首选方式。
preg_match( '/<title>(.*)<\/title>/',.....)
preg_match("/src=[\"']?([^\"']?.*(png|jpg|gif))[\"']?/i",....)
我不想使用simple_html_dom,如何使用php定期获取url部分1.html 2.html 3.html和文本部分111 222 333?谢谢.
<p>items</p>
<div>
<ul>
<li><a href="1.html">111</a></li>
<li><a href="2.html">222</a></li>
<li><a href="3.html">333</a></li>
</ul>
</div>
Run Code Online (Sandbox Code Playgroud) 有没有办法使用curl这样你可以做一些与php中的get_meta_tags()函数相同的东西?特别是在php中使用curl以尽可能少的开销来获取外部站点的元标记
您好我想从html文档中提取所有句子.我该怎么做?因为有很多条件,比如首先我们需要剥离标签,然后我们需要识别可能结束的句子.要么 ?要么 !也可能有电子邮件地址和网站地址等条件.在他们中我们如何制作这样的剧本?
所以我有一个有效的 preg_match 模式来查找字符串中 HTML 属性的值,我需要用 preg_replace 做同样的事情——不是找到并返回值,而是用一个新的值替换它。
但是如果我只使用 preg_match 模式它不起作用......我被卡住了。
这是代码:
$string = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
width="437" height="288" id="viddler">
<param name="movie" value="http://www.viddler.com/player/1234567890/" />
<param name="allowScriptAccess" value="always" />
<param name="allowFullScreen" value="true" />
<param name="flashvars" value="fake=1"/>
<embed src="http://www.viddler.com/player/1234567890/"
width="437" height="288" type="application/x-shockwave-flash"
allowScriptAccess="always" allowFullScreen="true" flashvars="fake=1"
name="viddler" ></embed></object>';
preg_match("|<*[^>]*width=\"([^>]+)\"[^>]*>|Ui", $string, $results);
echo 'Width: '.$results[1];
Run Code Online (Sandbox Code Playgroud)
这有效并将返回437。但是,如果我在 preg_replace() 函数中使用相同的模式,它将删除整个<object>标签。我需要用其他任何东西替换那个 437,比如 200。当我们在做的时候,我还需要替换高度值。最后,这应该适用于任何嵌入代码或 iframe,因此它应该分别查找width="或height="......就像上面的 preg_match 示例一样。
任何帮助深表感谢。
编辑:蒂姆的解决方案如下
我让蒂姆的模式进行了一个小的修改:
$interm = preg_replace('|(<*[^>]*width=)"[^>]+"([^>]*>)|Ui', '\1"200"\2', $string);
$result = preg_replace('|(<*[^>]*height=)"[^>]+"([^>]*>)|Ui', '\1"300"\2', $interm);
Run Code Online (Sandbox Code Playgroud)
如果没有这个更改,第一个函数会替换宽度,但它会删除标签中之后的所有属性。 …
我如何用PHP解析这个亚马逊产品页面并检索产品描述?
<div class="bucket">
<h2>Descrizione del prodotto</h2>
<div class="content">Taglia la corda per dare i bonbon al mostriciattolo ...</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我需要使用类"content"将文本转换为div,但是此页面中有多个div,其中包含"bucket"和"content"类.