例如我有字符串:
This is text outside \r \n of pre tags
<pre class="myclass"> Text inside \r \n pre tags</pre>
This is text \r \n \r\n outside of pre tags
任何人都可以帮我如何替换和删除\r\n,但只能在 <pre> 之外标签,(<pre class="myclass"></pre> 的内容不会被替换)?
如何使用 php 正则表达式和 preg_replace() 或其他方式来实现?
我在 var $text = 'text<pre class="myclass">text</pre>text'; 中有文字
非常感谢您的帮助
更新:
感谢大家的回复,对我很有帮助,我会考虑 DOM,我已经用 preg_split() 尝试过,似乎它可以满足我的需要,也许对某些人有帮助 - 在 <pre class="myclass"></pre> 之外替换\r\n标签:
function ReplaceOutsidePreTags($text) {
$parts = preg_split('/(\<pre class="myclass"\>.+?\<\/pre\>)/s',$text,-1,PREG_SPLIT_DELIM_CAPTURE);
$text_new = '';
foreach ($parts as $key=>$value) {
if (preg_match('[<pre class="myclass">|</pre>]',$value) == true) {
$text_new .= $value;
} else {
$text_new .= str_replace(array("\\r\\n","\\n","\\r"),array("","",""), $value);
}
}
return $text_new;
}
$text = 'this is text\r\n\r\r\n\n outside pre tag\r\n
<pre class="myclass">graphics,\r\n\r\nprogramming </pre>
this is text outside\r\n pre tag\r\n
<pre class="myclass">graphics,\r\n\r\nprogramming </pre>
this is text outside\r\n pre tag\r\n
<pre class="myclass">graphics,\r\n\r\nprogramming </pre>
this is text outside pre tag\r\n';
$text_new = $this->ReplaceOutsidePreTags($text);
echo $text_new;
结果>
this is text outside pre tag
<pre class="myclass">graphics,\r\n\r\nprogramming </pre>
this is text outside pre tag
<pre class="myclass">graphics,\r\n\r\nprogramming </pre>
this is text outside pre tag
<pre class="myclass">graphics,\r\n\r\nprogramming </pre>
this is text outside pre tag
最佳答案
通用“替换内容,但不替换其他内容”解决方案:
$out = preg_replace("(<pre(?:\s+\w+(?:=\w+|\"[^\"]+\"|'[^']+')?)*>.*?</pre>(*SKIP)(*FAIL)"
."|\r|\n)is", "", $in);
匹配<pre>标签(带有属性,可能是 bool 值、未引号、单引号或双引号,因为 HTML 没有反斜杠转义以使事情复杂化),然后跳过并使它们失败。然后匹配换行符并用空字符串替换它们。
然而,作为更一般的规则,请考虑研究 DOM 解析系统,例如 DOMDocument。遍历节点,忽略 <pre>标记并从剩余的文本节点中删除换行符。
我实际上使用与上述类似的正则表达式来保留重要位置的空白并将其从其他位置删除,但我使用 <!-- WSP_BEGIN --> ... <!-- WSP_END -->标记来绕过 HTML 解析的丑陋之处 - 因为用户提供的内容是 HTML 转义的,所以它不会与评论冲突,所以没有问题。
编辑:作为引用,这里是我正在使用的代码,它通过去除不必要的空格每天单独为我节省兆字节到千兆字节的带宽。我将其称为“预压缩空白”:
$c = preg_replace_callback(
"(<!-- WSP_BEGIN -->(.*?)<!-- WSP_END -->|\r|\n|\t)",
function($m) {
if( $m[1]) return $m[1]; // effectively strips markers
else return " "; // condense whitespace
},
$c
);
关于php - 如何用 PHP 替换\r\n 外部 <pre> 标签,而不是内部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32964843/
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request
我正在尝试用ruby中的gsub函数替换字符串中的某些单词,但有时效果很好,在某些情况下会出现此错误?这种格式有什么问题吗NoMethodError(undefinedmethod`gsub!'fornil:NilClass):模型.rbclassTest"replacethisID1",WAY=>"replacethisID2andID3",DELTA=>"replacethisID4"}end另一个模型.rbclassCheck 最佳答案 啊,我找到了!gsub!是一个非常奇怪的方法。首先,它替换了字符串,所以它实际上修改了
我使用Nokogiri(Rubygem)css搜索寻找某些在我的html里面。看起来Nokogiri的css搜索不喜欢正则表达式。我想切换到Nokogiri的xpath搜索,因为这似乎支持搜索字符串中的正则表达式。如何在xpath搜索中实现下面提到的(伪)css搜索?require'rubygems'require'nokogiri'value=Nokogiri::HTML.parse(ABBlaCD3"HTML_END#my_blockisgivenmy_bl="1"#my_eqcorrespondstothisregexmy_eq="\/[0-9]+\/"#FIXMEThefoll
HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候
两个gsub产生不同的结果。谁能解释一下为什么?代码也可在https://gist.github.com/franklsf95/6c0f8938f28706b5644d获得.ver=9999str="\tCFBundleDevelopmentRegion\n\ten\n\tCFBundleVersion\n\t0.1.190\n\tAppID\n\t000000000000000"putsstr.gsub/(CFBundleVersion\n\t.*\.).*()/,"#{$1}#{ver}#{$2}"puts'--------'putsstr.gsub/(CFBundleVersio
我在一个我想在formtasticGem中覆盖的方法中找到了这个。该方法如下所示:defto_htmlinput_wrappingdohidden_field_html是什么意思?在第三行做什么?我知道它对数组有什么作用,但在这里我不知道。 最佳答案 你可以这样读:hidden_field_htmllabel_with_nested_checkbox是连接到hidden_field_html末尾的参数-为了“清晰”,他们将其分成两行 关于ruby-on-rails-没有参数的`
我已经看到了一些其他的问题,尝试了他们的建议,但没有一个对我有用。我已经使用Rails大约一年了,刚刚开始一个新的Rails项目,突然遇到了问题。我卸载并尝试重新安装所有Ruby和Rails。Ruby很好,但Rails不行。当我输入railss时,我得到了can'tfindgemrailties。我当前的Ruby版本是ruby2.2.2p95(2015-04-13修订版50295)[x86_64-darwin15],尽管我一直在尝试通过rbenv设置ruby2.3.0。如果我尝试rails-v查看我正在运行的版本,我会得到同样的错误。我使用的是MacOSXElCapitan版本10
我理解(我认为)Ruby中类变量和类的实例变量之间的区别。我想知道如何从该类外部访问该类的实例变量。从内部(即在类方法中而不是实例方法中),它可以直接访问,但是从外部,有没有办法做MyClass.class.[@$#]variablename?我没有任何具体原因要这样做,只是学习Ruby并想知道是否可行。 最佳答案 classMyClass@my_class_instance_var="foo"class上述yield:>>foo我相信Arkku演示了如何从类外部访问类变量(@@),而不是类实例变量(@)。我从这篇文章中提取了上述内