我想匹配这样的每个字符串
<img src="whatever" whatever alt="whatever" whatever height="any number but not 162" whatever />
Run Code Online (Sandbox Code Playgroud)
换句话说,我希望匹配每个字符串,在"链接"之后包含除数字162之外的任何字符串(整数而不仅仅是单个字符).我用这个
function embed($strr) {
$strr = preg_replace('@<img.*src="([^"]+)"(?:[^1]+|1(?:$|[^6]|6(?:$|[^2]))) />@is', '[img]$1[/img]', $strr);
return $strr;
}
Run Code Online (Sandbox Code Playgroud)
但这与包含1而不是162的所有内容都不匹配.我该如何解决?
我用CKEditor构建了一个迷你内容管理系统.用户可以从其他网站粘贴图像URL.有没有办法在用户提交内容时获取所有图像URL,将所有这些图像保存到服务器,并用我的服务器的URL替换另一个服务器的URL?
例如,用户写了这样的东西:
<img src="somews.com/img1.jpg"/>Lorem Ipsum is simply dummy text of the printing and typesetting industry. ...
Run Code Online (Sandbox Code Playgroud)
在提交过程中,PHP会将图像保存somews.com/img1.jpg到服务器,将其URL转换为myserver.com/photos/img1.jpg并替换 <img src="somews.com/img1.jpg"/>为..这可能吗?
可能重复:
如何使用PHP解析和处理HTML?
$content = "
<p>This is the first paragraph</p>
<p>This is the second paragraph</p>
<p>This is the third paragraph</p>";
Run Code Online (Sandbox Code Playgroud)
给定上面的一串html内容,我需要在第N段标记之后插入.
我如何解析内容并插入给定的文本字符串,在第2段之后说"你好世界"?
我有一个字符串:
$str = "hello world, this is mars"
Run Code Online (Sandbox Code Playgroud)
我想要一个改进的strstr,看起来像这样:
istrstr($str, 'world', 'is')
Run Code Online (Sandbox Code Playgroud)
并且返回值将是:
"world, this"
Run Code Online (Sandbox Code Playgroud)
换句话说,有一根针开始,一根针结束.
我只是想知道是否已经有解决方案,或者我应该自己写一个...
更新:
基于答案,我做了这个功能:
function istrstr($haystack, $needle_start, $needle_end, $include = false) {
if (!$include) {
$pos_start = strpos($haystack, $needle_start) + strlen($needle_start);
$pos_end = strpos($haystack, $needle_end, $pos_start);
return substr($haystack, $pos_start, $pos_end - $pos_start);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我只需要排除版本,所以我没有打扰包括一个......
我需要<p>在字符串中找到标签.然后我想存储来自(包括)的字符串
标记到另一个变量.
例如,我有字符串名称firstString;
firstString = "<div id='tab-1'><p>This is first string</p></div>"
我想要第二个字符串
secondString = "<p>This is first string</p>"
我只需要第一个<p>标签.
我正在使用正则表达式.从来没有完全理解它真正的问题是:是否有人有一个很好的网站,解释表达之间的差异,而不只是发布像
$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文件?
我有一个问题,我已经尝试解决两天了,但找不到解决它所需的信息。
我想要做的是从 .gpx 文件中获取 lat、lon 和 ele 值并将它们放入表中。
我制作了页面让用户将 gpx 文件上传到服务器上。然后,我创建一个名为一、二、三等的新表,数据库中的下一个数字称为“vluchten”。
该表包含 lat、lon 和 ele 字段,全部都是双精度数。
现在,我需要打开用户可能上传的任何 .gpx 文件,并将纬度、经度和坐标提取到我的表中。
我已经研究过使用 php 文件系统函数(fopen、fseek 等),但它们似乎对我的需求没有用处。我还尝试将其作为 XML 读取,但这也不起作用(也许我犯了错误)。
非常欢迎任何关于如何从 .gpx 文件中获取值并将它们放入数据库表中的建议!PHP 页面将接收 lat、lon 和 ele 需要进入的表名称$_POST['name']。
简而言之,我的问题是:如何从 .gpx 中取出 lon、lat 和 ele 并使用 SQL 将它们放入表中?
如果文件中的注释覆盖了其中的 6 行,则应删除该注释并替换为与注释行数相等的空行。
这是我的意思的一个小示范。给定的 file.html 有 10 行:
line 1 : <!-- text
line 2 : text
line 3 : text
line 4 : empty line
line 5 : text
line 6 : -->
line 7 :empty line
line 8 :text
line 9 :empty line
line 10 :text
Run Code Online (Sandbox Code Playgroud)
预期的输出将是:
line 1 :empty line
line 2 :empty line
line 3 :empty line
line 4 :empty line
line 5 :empty line
line 6 :empty line
line 7 :empty line
line 8 :text …Run Code Online (Sandbox Code Playgroud)