Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从字符串中获取单词-跳过html_Php_Regex_Preg Match All - Fatal编程技术网

Php 从字符串中获取单词-跳过html

Php 从字符串中获取单词-跳过html,php,regex,preg-match-all,Php,Regex,Preg Match All,我使用函数获取字符串的第一个“x”字。主要部分是: preg_match_all('/(<\/?([\w+]+)[^>]*>)?([^<>]*)/', $text, $tags, PREG_SET_ORDER); preg\u match\u all('/(]*>)?([^]*)/',$text,$tags,preg\u SET\u顺序); 当一个单词在html中时-示例: <a href="/"><u>Linktext</u>

我使用函数获取字符串的第一个“x”字。主要部分是:

preg_match_all('/(<\/?([\w+]+)[^>]*>)?([^<>]*)/', $text, $tags, PREG_SET_ORDER);
preg\u match\u all('/(]*>)?([^]*)/',$text,$tags,preg\u SET\u顺序);
当一个单词在html中时-示例:

<a href="/"><u>Linktext</u></a>

正则表达式将单词“linktext”视为一个单词。正则表达式应更改为跳过html标记中的每个单词


这可能吗

使用XSL转换。我使用了相关答案()中的模板:

$string='';
$xslTemplate='0
';
libxml\u使用\u内部错误(true);
$inputDom=newdomdocument();
$inputDom->loadHTML($string);
$xslDom=newdomdocument();
$xslDom->loadXML($xslTemplate);
$cp=新的XSLTProcessor();
$cp->registerHPFunctions();
$cp->importStylesheet($xslDom);
$transformedResult=$cp->transformToDoc($inputDom);
$transformedHtmlString=$transformedResult->saveXML($transformedResult->getElementsByTagName('body')->项(0));
$transformedHtmlString=str_replace(“”,,$transformedHtmlString)//saveXml()方法保留自动创建的body标记
$transformedHtmlString=str_replace(“”,,$transformedHtmlString);
echo$transformedHtmlString;

那么您想要html标记之外的所有文本吗?@user2057781请尝试此
(?)\b(]*>)([^]*)\b(?!\n请提供更多输入字符串。请在您的问题中提供更好/更多的输入示例,以及您希望实现的目标。不幸的是,您提到的这个问题已被删除。您应该在此处提供问题的完整解释。我不想使用strip_标记。我需要字符串中的html。我现在看到了,请查看更正的答案。当然,也要注意herdoc封闭标记'XML;',这应该是代码的一部分。也许这听起来像垃圾,但我只有php文件来处理文本。当我将此XML代码添加到我的php文件时,我出现语法错误。这是因为我在上面的评论中提到的缺少herdoc封闭标记。我已将herdoc转换为纯字符串以避免inc正确的解析器行为。
$string = '<a href="/">Some text <u>Linktext</u> more text</a>';
$xslTemplate = '<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">
  <!-- copy all nodes -->
  <xsl:template match="node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
  <!-- clear attributes -->
  <xsl:template match="@*">
    <xsl:attribute name="{name()}" />
  </xsl:template>
  <!-- ignore text content of nodex -->
  <xsl:template match="text()" />
</xsl:stylesheet>';

libxml_use_internal_errors(true);

$inputDom = new DOMDocument();
$inputDom->loadHTML($string);

$xslDom = new DOMDocument();
$xslDom->loadXML($xslTemplate);

$cp = new XSLTProcessor();
$cp->registerPHPFunctions();
$cp->importStylesheet($xslDom);

$transformedResult = $cp->transformToDoc($inputDom);
$transformedHtmlString = $transformedResult->saveXML($transformedResult->getElementsByTagName('body')->item(0));

$transformedHtmlString = str_replace('<body>','', $transformedHtmlString); //saveXml() method leaves automatically created body tag
$transformedHtmlString = str_replace('</body>','', $transformedHtmlString);
echo $transformedHtmlString;