小编Ala*_*air的帖子

RegEx:快速删除非字母UTF-8安全

我试图删除PHP中除有效字母(来自任何语言)之外的所有内容.我一直在用这个:

$content=preg_replace('/[^\pL\p{Zs}]/u', '', $content);
Run Code Online (Sandbox Code Playgroud)

但它的速度很慢.比以下时间长约30倍:

$content=preg_replace('/[^a-z\s]/', '', $content);
Run Code Online (Sandbox Code Playgroud)

我正在处理大量数据,因此使用慢速方法实际上是不可行的.

有更快的方法吗?

php regex utf-8

11
推荐指数
1
解决办法
1212
查看次数

如何设置CMAKE_PREFIX_PATH?

我对全球环境变量有疑问CMAKE_PREFIX_PATH.我已经设置了这个,我可以看到它在我键入env时设置,但是当我运行cmake .构建HipHop时,它告诉我该变量未设置.

有没有办法可以将其硬编码到makefile中?

cmake

8
推荐指数
2
解决办法
3万
查看次数

Go:从字符串中删除重音符号

我是Go的新手,我正在尝试实现一个函数,将重音字符转换为非重音符号.我正在尝试按照博客中给出的示例(请参阅"执行魔术"标题).

我试图从中收集到的是:

package main

import (
    "fmt"
    "unicode"
    "bytes"
    "code.google.com/p/go.text/transform"
    "code.google.com/p/go.text/unicode/norm"
)


func isMn (r rune) bool {
        return unicode.Is(unicode.Mn, r) // Mn: nonspacing marks
    }

func main() {
    r := bytes.NewBufferString("Your ?tring")
    t := transform.Chain(norm.NFD, transform.RemoveFunc(isMn), norm.NFC)
    r = transform.NewReader(r, t)
    fmt.Println(r)
}
Run Code Online (Sandbox Code Playgroud)

它丝毫没有用,我老实说也不知道它意味着什么.有任何想法吗?

go

8
推荐指数
2
解决办法
2110
查看次数

PHP:gzdeflate在多台机器上安全吗?

在PHP手册中有一个关于gzdeflate的评论说:

gzcompress生成更长的数据,因为它将有关编码的信息嵌入到字符串中.如果要压缩只能在一台计算机上处​​理的数据,则无需担心使用哪些功能.但是,如果要将使用这些函数压缩的数据传递到其他计算机,则应使用gzcompress.

然后

在各种内容上运行50000次重复,我发现无论内容和压缩级别如何,gzdeflate()和gzcompress()的执行速度都相同,但gzinflate()的速度总是gzuncompress()的两倍.

出于我的目的,我将数据存档在机器上以备将来使用.数据经常被读取,但只写一次.从理论上讲,如果我在某个时候更换服务器,有一天它会转移到另一台机器上,但这是几年后的事情.

与gzcompress和gzuncompress相比,使用gzdeflate和gzinflate对我来说安全吗?

我的想法如下:gzinflate更快,这将有助于服务器很多,因为会有很多读取请求.如果在将来的某个时候我无法读取文件,那么我应该能够弄清楚如何解压缩文件并重新压缩它,对吧?并不是说gzinflate有一天会神奇地无法工作,就像第一条评论似乎在说的那样.即使错过了一个6字节的标题,我也确信它会以某种方式扩展.

思考?

更新 - 基准

每次10,000次迭代:

gzdeflate took 19.158888816833 seconds and size 18521
gzinflate took 1.4803981781006 seconds
gzcompress took 19.376484870911 seconds and size 18527
gzuncompress took 1.6339199542999 seconds
gzencode took 20.015944004059 seconds and size 18539
gzdecodetook 1.8822891712189 seconds
Run Code Online (Sandbox Code Playgroud)

php compression gzip

7
推荐指数
1
解决办法
1786
查看次数

PHP preg_replace:从字符串的开头和结尾删除标点符号

我可以在PHP中使用什么正则表达式从字符串的开头和结尾删除所有标点符号?

php regex

6
推荐指数
2
解决办法
4714
查看次数

PHP从多个字符串中提取类似的部分

我正在尝试从多个字符串中提取相似的部分.

这样做的目的是尝试从标题页的多个OCR中提取书的标题.

这仅适用于字符串的开头,字符串的末尾不需要修剪并且可以保持原样.

例如,我的字符串可能是:

$title[0]='the history of the internet, expanded and revised';
$title[1]='the history of the internet';
$title[2]='published by xyz publisher the historv of the internot, expanded and';
$title[3]='history of the internet';
Run Code Online (Sandbox Code Playgroud)

所以基本上我想修剪每个字符串,以便它从最可能的起点开始.考虑到可能存在OCR错误(例如"historv","internot"),我认为最好从每个单词中获取字符数,这将为每个字符串提供一个数组(因此是一个多维数组)每个单词的长度.然后可以使用它来查找正在运行的匹配并最有可能修剪字符串的开头.

字符串应该切成:

$title[0]='the history of the internet, expanded and revised';
$title[1]='the history of the internet';
$title[2]='the historv of the internot, expanded and';
$title[3]='XXX history of the internet';
Run Code Online (Sandbox Code Playgroud)

所以我需要能够认识到"互联网的历史"(7 2 3 8)是匹配所有字符串的运行,并且前面的"the"最可能是正确的,因为它发生在> 50%的字符串,因此每个字符串的开头被修剪为"the",并且相同长度的占位符被添加到缺少"the"的字符串上.

到目前为止我有:

function CompareSimilarStrings($array)
    {
    $n=count($array);

    // Get length of each word in each string >
    for($run=0; …
Run Code Online (Sandbox Code Playgroud)

php string

6
推荐指数
1
解决办法
997
查看次数

PHP:mb_strtoupper无法正常工作

我有UTF-8和mb_strtoupper的问题.

mb_internal_encoding('UTF-8');
$guesstitlestring='Le Courrier de Sáint-Hyácinthe';

$encoding=mb_detect_encoding($guesstitlestring);
if ($encoding!=='UTF-8') $guesstitlestring=mb_convert_encoding($guesstitlestring,'UTF-8',$encoding);

echo "DEBUG1 $guesstitlestring\n";
$guesstitlestring=mb_strtoupper($guesstitlestring);
echo "DEBUG2 $guesstitlestring\n";
Run Code Online (Sandbox Code Playgroud)

结果:

DEBUG1 Le Courrier de Sáint-Hyácinthe
DEBUG2 LE COURRIER DE S?INT-HY?CINTHE
Run Code Online (Sandbox Code Playgroud)

我不明白为什么会这样?我正在尝试尽可能小心地使用编码.该字符串首先作为UTF-8给出,经过验证并可能重新转换为UTF-8.这是一场噩梦!

UPDATE

所以我发现这是由于我通过控制台输入参数和从控制台返回的参数的组合引起的.所以他们在前进和出路的路上都是乱码.解决方案是不以这种方式输入任何参数,或以这种方式获取参数.

感谢大家帮忙解决这个问题!

php utf-8 mbstring

6
推荐指数
1
解决办法
1万
查看次数

MySQL:来自另一个表的COUNT的UPDATE表?

我觉得这很简单,但我不能理解它...

我有一个表tbl1,它有列id,otherstuff,num.

我有另一张桌子tbl2,它有列id,info.

我想的是使numtbl1等于行具有相同数量idtbl2.有点像这样:

UPDATE tbl1 SET num =
(SELECT COUNT(*) FROM tbl2 WHERE id=tbl1.id)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

mysql sql

6
推荐指数
2
解决办法
1万
查看次数

Go:从[]字节转换为字符串的开销,反之亦然

我似乎总是一遍又一遍地将字符串转换为[] byte到string.这有很多开销吗?有没有更好的办法?

例如,这是一个接受UTF8字符串,规范化,删除重音,然后将特殊字符转换为ASCII等效字符的函数:

var transliterations = map[rune]string{'Æ':"AE",'Ð':"D",'?':"L",'Ø':"OE",'Þ':"Th",'ß':"ss",'æ':"ae",'ð':"d",'?':"l",'ø':"oe",'þ':"th",'Œ':"OE",'œ':"oe"}
func RemoveAccents(s string) string {
    b := make([]byte, len(s))
    t := transform.Chain(norm.NFD, transform.RemoveFunc(isMn), norm.NFC)
    _, _, e := t.Transform(b, []byte(s), true)
    if e != nil { panic(e) }
    r := string(b)

    var f bytes.Buffer
    for _, c := range r {
        temp := rune(c)
        if val, ok := transliterations[temp]; ok {
            f.WriteString(val)
        } else {
            f.WriteRune(temp)
        }
    }
    return f.String()
}
Run Code Online (Sandbox Code Playgroud)

所以我开始使用字符串,因为这是我得到的,然后我将它转换为字节数组,然后返回到字符串,然后再转换为字节数组,然后再转换回字符串.当然这是不必要的,但我无法弄清楚如何不这样做..?它是否真的有很多开销,或者我不必担心过度转换会减慢速度?

(如果有人有时间我还没弄清楚bytes.Buffer实际上是如何工作的,那么初始化一个字符串大小2 倍的缓冲区会不会更好,这是返回值的最大输出大小?)

string go

6
推荐指数
1
解决办法
1758
查看次数

Go:没有哈希表(又名地图)的高效字符串查找?

我在Golang中遇到问题,我需要能够查找大约5,000,000个字符串的字符串键,每个字符串只包含az(小写)和0-9个字符.与uint32和uint64类似的问题作为键.

地图(哈希表)是完美的,但它使用了太多的RAM.

对于这种类型的东西必须有已知的方法,我一直在研究B-Tree,但我不确定它是最有效的机制.

我的问题的一些特殊性,可以导致更有效的解决方案,是:

  1. 键只需要是a-z0-9或简单uint值的字符串.
  2. 一旦构建,它只需要是只读的.

因为它只需要是只读的,所以在我看来,将它作为带有一系列索引的预排序列表,可能会运行良好.我一开始以为我可能只能在每个级别(即字符)中使用36(26个字母+10个数字)索引进行切片...但当然这意味着36 ^无论哪个最终与...相反高效.然后我想也许我可以为每个级别只放一个36的索引,但最后我需要交叉一组数组/切片来获取结果的ID.

我想我正在寻找某种非常具体的B-Tree实现,但更多地关注我的目的(没有B.)

有谁知道我所建议的任何存在的东西?

b-tree go

6
推荐指数
1
解决办法
1897
查看次数

标签 统计

php ×5

go ×3

regex ×2

string ×2

utf-8 ×2

b-tree ×1

cmake ×1

compression ×1

gzip ×1

mbstring ×1

mysql ×1

sql ×1