- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好吧,我知道有几个类似的问题,但在这个特定案例中找不到任何问题。
我使用了一段代码并根据需要对其进行了调整,但现在我在其中发现了一个我无法纠正的错误。
代码:
$tag = 'namespace';
$match = Tags::get($f, $tag);
var_dump($match);
static function get( $xml, $tag) { // http://stackoverflow.com/questions/3404433/get-content-within-a-html-tag-using-7-processing
// bug case string(56) "<namespaces>
// <namespace key="-2">Media</namespace>"
$tag_ini = "<{$tag}[^\>]*?>"; $tag_end = "<\\/{$tag}>";
$tag_regex = '/' . $tag_ini . '(.*?)' . $tag_end . '/si';
preg_match_all($tag_regex,
$xml,
$matches,
PREG_OFFSET_CAPTURE);
return $matches;
}
如你所见,如果标签是嵌套的,就会出现错误:
<namespaces> <namespace key="-2">Media</namespace>
什么时候应该返回'Media',甚至是外层的'<namespaces>'
然后是里面的。
我尝试添加“<{$tag}[^\>|^\r\n ]*?>
”,^\s+
,将 * 更改为 *?,以及其他一些在最好的情况下只能识别错误情况的事情。
也试过"<{$tag}[^{$tag}]*?>"
这给出了空白,我想它会自行无效。
我是正则表达式的新手,我可以说要解决这个问题只需要添加不要让打开相同类型的新标签。或者我什至可以为我的用例使用 hack 答案,排除内部文本是否有换行符。
谁能得到正确的语法?
您可以在此处查看文本摘录:http://pastebin.com/f2naN2S3
提议的更改后:$tag_ini = "<{$tag}\\b[^>]*>"; $tag_end = "<\\/{$tag}>";
它确实适用于示例案例,但不适用于此案例:
<namespace key="0" />
<namespace key="1">Talk</namespace>
因为它导致:
<namespace key="1">Talk"
这是因为数字和 "以及字母被认为是在单词边界内。我该如何解决这个问题?
最佳答案
主要问题是您没有在开始标记后使用单词边界,因此,namespace
在模式中也可以匹配 namespaces
标记和许多其他标记。
后续问题是 <${tag}\b[^>]*>(.*?)<\/${tag}>
如果有一个自动关闭模式会过火 namespace
标签后跟“正常”成对打开/关闭 namespace
标签。因此,您需要使用负面回顾 (?<!\/)
在 >
之前(参见 demo ),或使用 (?![^>]*\/>)
\b
之后的负前瞻(参见 demo)。
所以,你可以使用
$tag_ini = "<{$tag}\\b[^>]*(?<!\\/)>"; $tag_end = "<\\/{$tag}>";
关于php - preg 匹配标签之间的文本,排除之间的相同标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37512370/
如何用 preg_replace 替换格式为“Fri Mar 23 15:21:08 2012”的日期/时间?这种格式的日期在我的文本中出现了几次,我需要将其替换为当前时间/日期。 谢谢, 克里斯 最
如何使用 preg replace 替换单个问号。 最佳答案 preg_replace('/\?/', 'replacement', $original, 1) 关于php: preg 替换单个问号?
如何预匹配所有字符 字母、数字、特殊字符 f.e: ²,▲,ƒ ² ‰ © £ ± ß ° 1/2 ¿ « » ™...等等...??? 和其他特殊字符??? 最佳答案 除换行符(\r 或\n)之外的
我有一个 preg match 语句,它检查匹配,但我想知道如何计算匹配。任何建议表示赞赏。 $message='[tag] [tag]'; preg_match('/\[tag]\b/i',$mes
如何对 null(空)字符串进行 preg_match? 我需要类似的东西: /([0-9]|[NULL STRING])/ 最佳答案 您可以使用 ^ 来匹配行首,使用 $ 来匹配行尾,因此正则表达式
Inspection and treatment will be conducted to areas prone to Mouse infestation by our Service Specia
我有像这样的库中的 mysql 函数 PREG_CAPTURE('/id\=\'(.*)\'/i', xml, 1, 1) ,并且我 try catch 元素从这个日志 "xml":id='t6e8u
如何使用 preg_replace 将多个下划线替换为一个下划线? 最佳答案 + operator (quantifier)匹配最后一个字符的多个实例(、字符类或捕获组或反向引用)。 $string
我正在使用预匹配来验证密码: (preg_match("/^.*(?=.{5,}).*$/", $password) 它也接受特殊字符。 但出于某种原因,我需要修改它应该接受 仅字母数字 至少 5 个
我创建了一个模式来匹配 a 标签之间的 3 个数字(例如:333)的字符串: @(((.?[^()].?))*)([0-9]{3})(((.*?)?))@i 我如何反转上面的模式以获得不在 a 标记之
在http://gskinner.com/RegExr/下面的正则表达式工作但不是在 PHP 中 (?>AB/HDR)(?:[^])*?(?=AB/HDR|RUN DATE|\z) 在 PHP 中是这
在php中preg_match()函数是用来执行正则表达式的一个常用的函数。正则表达式几乎在所有编程语言里面都会用到,本实例介绍php中正则表达式preg_match函数的应用。 preg_mat
我在 d:/www/web12/index.php 中有一个 index.php 里面有一些 anchor 标签,例如 我想要 preg_replace 它们到 $url = preg_rep
我有这个代码: $1', $test); echo $test; ?> 我想做:$array[] = $1 请问有人有什么建议吗? 最佳答案 如果你使用 PHP ≥ 5.3.0 你可以使用 anony
我有一行我必须替换下面的行 /myhome/ishere/where/are.you.ha 这里我有一个实时正则表达式 preg_match('/(.+\/)[^.]+(.+\.ha)/', $inp
我有一行我必须替换下面的行 /myhome/ishere/where/are.you.ha 这里我有一个实时正则表达式 preg_match('/(.+\/)[^.]+(.+\.ha)/', $inp
您好,我使用 preg_replace 将非字母数字数据替换为“”。 1) SELECT PREG_REPLACE('[^A-Za-z0-9]','',CATALOGUEREFERENCE)
我刚刚升级到 PHP 7,并一直在努力解决与已弃用函数相关的错误,并取得了很大成功。 遗憾的是,我在修复“在交互式可折叠 javascript 中查看 php 数组”代码的新 preg 替换方法时遇到
好吧,我知道有几个类似的问题,但在这个特定案例中找不到任何问题。 我使用了一段代码并根据需要对其进行了调整,但现在我在其中发现了一个我无法纠正的错误。 代码: $tag = 'namespace';
我有这段代码: function queryString(){ //matches up to 10 digits in page number $query_string = ere
我是一名优秀的程序员,十分优秀!