php - 正则表达式:在不在文本区域中的字符串中查找换行符

标签 php regex

嘿,所以我正在寻找一个正则表达式,它允许我基本上用任何东西(例如“xxx”)替换换行符,但前提是换行符不在 textarea 标签内。

例如,以下内容:

<strong>abcd
efg</strong>
<textarea>curious
george
</textarea>
<span>happy</span>

会变成:

<strong>abcdxxxefg</strong>xxx<textarea>curious
geroge
</textarea>xxx<span>happy</span>

有人知道我应该从哪里开始吗?我在这里有点无能为力:( 感谢您提供的任何帮助。

最佳答案

我知道了,但你不会喜欢的。 ;)

$result = preg_replace(
  '~[\r\n]++(?=(?>[^<]++|<(?!/?textarea\b))*+(?!</textarea\b))~',
  'XYZ', $source);

匹配换行符后,先行扫描,消耗任何不是左尖括号的字符,或任何不是 <textarea> 开头的左尖括号或 </textarea>标签。当它用完这些标签时,它看到的下一件事必须是这些标签之一或字符串的结尾。如果是 </textarea>标记,这意味着在 textarea 元素内发现换行符,因此匹配失败,并且不会替换该换行符。

我在下面包含了一个扩展版本,您可以 see it an action on ideone .如果你真的愿意,你也可以调整它来处理其他标签。但在我看来你需要的是一个 HTML 最小化器(或 minifier);有很多可用的。

  $re=<<<EOT
~
[\r\n]++
(?=
  (?>
    [^<]++            # not left angle brackets, or
  |
    <(?!/?textarea\b) # bracket if not for TA tag (opening or closing)
  )*+
  (?!</textarea\b)    # first TA tag found must be opening, not closing
)
~x
EOT;

关于php - 正则表达式:在不在文本区域中的字符串中查找换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4118783/

相关文章:

javascript - 如何使用 ajax 分块上传文件并检查是否失败,重新上传失败的部分。

Java - 正则表达式问题

javascript - 使用正则表达式捕获组一定次数,但最后一组有剩余值

c# - 使用正则表达式模式提取键值对

r - Pivot_longer 与正则表达式用于名称模式中的两位数字

javascript - Wordpress AJAX 登录启动

php - 从查询中获取所有月份,包括零计数

PhP 在使用 iOS 图像进行方向校正后上传 ImageJPEG

php - 当某些数据丢失时,mysql $result 是否设置?

ruby - 反斜杠 + Ruby 正则表达式中的捕获组